DearPyGui
DearPyGui copied to clipboard
dpg.move_item does not work on tooltip
Version of Dear PyGui
Version: 1.11 Operating System: Windows 11
My Issue/Question
In short: dpg.move_item doesn't work on tooltip
A bit more discussion here on discord for reference.
https://discordapp.com/channels/736279277242417272/876200434468016178/1365250599578505317
To Reproduce
Short reproducer, thanks to @v-ein
import dearpygui.dearpygui as dpg
dpg.create_context()
dpg.create_viewport(title=f"Test - {dpg.get_dearpygui_version()}, {dpg.__file__}", width=800, height=800)
with dpg.window():
dpg.set_primary_window(dpg.last_item(), True)
dpg.add_text("Tooltip Parent")
with dpg.tooltip(parent=dpg.last_item()) as tooltip:
dpg.add_text("Tooltip")
dpg.add_button(label="Move it!", tag="btn", callback=lambda: dpg.move_item(tooltip, parent="btn"))
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.show_item_registry()
dpg.start_dearpygui()
dpg.destroy_context()
Expected behavior
It should move the tooltip from one parent to another, but instead the tooltip just disappears.
import dearpygui.dearpygui as dpg
dpg.create_context()
dpg.create_viewport()
dpg.setup_dearpygui()
dpg.show_viewport()
def custom_tooltip_moving(s, a, u, tooltip):
parent = dpg.get_item_parent(s)
childrens = dpg.get_item_children(parent, slot=1)
if childrens[-1] == s:
dpg.move_item(tooltip, parent=parent)
else:
dpg.move_item(tooltip, parent=parent, before=childrens[childrens.index(s)+1])
with dpg.window(min_size=(200, 200)):
with dpg.child_window():
btn_1 = dpg.add_button(label="btn_1", callback=lambda s, a, u: custom_tooltip_moving(s, a, u, tooltip))
btn_2 = dpg.add_button(label="btn_2", callback=lambda s, a, u: custom_tooltip_moving(s, a, u, tooltip))
btn_3 = dpg.add_button(label="btn_3", callback=lambda s, a, u: custom_tooltip_moving(s, a, u, tooltip))
with dpg.tooltip(parent=btn_3) as tooltip:
dpg.add_text("tooltip_text")
dpg.show_item_registry()
dpg.start_dearpygui()
dpg.destroy_context()
@tobyclh , @v-ein . I think this might be a workaround that parent of the tooltip is also parent of the hovered item.
import dearpygui.dearpygui as dpg
dpg.create_context()
dpg.create_viewport()
dpg.setup_dearpygui()
dpg.show_viewport()
def custom_tooltip_moving(s, a, u, tooltip):
parent = dpg.get_item_parent(s)
childrens = dpg.get_item_children(parent, slot=1)
if childrens[-1] == s:
dpg.move_item(tooltip, parent=parent)
else:
next_item = childrens[childrens.index(s)+1]
if dpg.get_item_type(next_item) == "mvAppItemType::mvTooltip": return
dpg.move_item(tooltip, parent=parent, before=next_item)
with dpg.window(min_size=(200, 200)):
with dpg.child_window():
btn_1 = dpg.add_button(label="btn_1", callback=lambda s, a, u: custom_tooltip_moving(s, a, u, tooltip))
btn_2 = dpg.add_button(label="btn_2", callback=lambda s, a, u: custom_tooltip_moving(s, a, u, tooltip))
btn_3 = dpg.add_button(label="btn_3", callback=lambda s, a, u: custom_tooltip_moving(s, a, u, tooltip))
with dpg.tooltip(parent=btn_3) as tooltip:
dpg.add_text("tooltip_text")
dpg.show_item_registry()
dpg.start_dearpygui()
dpg.destroy_context()