DearPyGui icon indicating copy to clipboard operation
DearPyGui copied to clipboard

dpg.move_item does not work on tooltip

Open tobyclh opened this issue 7 months ago • 2 comments

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.

tobyclh avatar May 20 '25 04:05 tobyclh

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.

nvglucifer avatar Oct 06 '25 06:10 nvglucifer

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()

nvglucifer avatar Oct 06 '25 06:10 nvglucifer