MCPcopy Create free account
hub / github.com/CJackHwang/AIstudioProxyAPI / CTkTooltip

Class CTkTooltip

gui/utils.py:94–164  ·  view source on GitHub ↗

Modern tooltip widget for CustomTkinter. Shows a tooltip on hover with smooth appearance. Usage: CTkTooltip(widget, "tooltip_key")

Source from the content-addressed store, hash-verified

92
93
94class CTkTooltip:
95 """
96 Modern tooltip widget for CustomTkinter.
97
98 Shows a tooltip on hover with smooth appearance.
99
100 Usage:
101 CTkTooltip(widget, "tooltip_key")
102 """
103
104 def __init__(self, widget: ctk.CTkBaseClass, text_key: str):
105 self.widget = widget
106 self.text_key = text_key
107 self.tooltip_window: Optional[ctk.CTkToplevel] = None
108 self._scheduled_id = None
109
110 widget.bind("<Enter>", self._schedule_show)
111 widget.bind("<Leave>", self._hide)
112 widget.bind("<ButtonPress>", self._hide)
113
114 def _schedule_show(self, event=None) -> None:
115 """Schedule tooltip to appear after delay."""
116 self._cancel_schedule()
117 self._scheduled_id = self.widget.after(500, self._show)
118
119 def _cancel_schedule(self) -> None:
120 """Cancel scheduled tooltip."""
121 if self._scheduled_id:
122 self.widget.after_cancel(self._scheduled_id)
123 self._scheduled_id = None
124
125 def _show(self) -> None:
126 """Show the tooltip."""
127 if self.tooltip_window:
128 return
129
130 x = self.widget.winfo_rootx() + 20
131 y = self.widget.winfo_rooty() + self.widget.winfo_height() + 5
132
133 self.tooltip_window = ctk.CTkToplevel(self.widget)
134 self.tooltip_window.wm_overrideredirect(True)
135 self.tooltip_window.wm_geometry(f"+{x}+{y}")
136
137 # Remove window decorations and make it float
138 self.tooltip_window.attributes("-topmost", True)
139
140 # Tooltip frame with rounded corners
141 frame = ctk.CTkFrame(
142 self.tooltip_window,
143 fg_color=COLORS["bg_medium"],
144 corner_radius=DIMENSIONS["corner_radius_small"],
145 border_width=1,
146 border_color=COLORS["border"],
147 )
148 frame.pack(fill="both", expand=True)
149
150 label = ctk.CTkLabel(
151 frame,

Calls

no outgoing calls