Я создаю всплывающее сообщение, которое исчезает, если пользователь щелкает за пределами рамки всплывающего окна. Чтобы проверить, щелкает ли пользователь за рамкой, код выглядит примерно так:
import tkinter as tk
def build_popup(self, root):
popup_frame = tk.Frame(root)
popup_frame.grid(row=0, column=0)
# binding to check if click is outside the frame
self.popup_frame_funcid = root.bind_all('<Button-1>', self.delete_popup)
my_canvas = tk.Canvas(popup_frame, width=200, height=200)
my_canvas.grid(row=0, column=0)
def delete_popup(self, root, event):
# if location clicked is not that of a child of the frame destroy popup
if root.winfo_containing(event.x_root, event.y_root) not in popup_frame.winfo_children():
popup_frame.destroy()
root.unbind('<Button-1>', self.popupframe_funcid)
Однако возникает проблема, когда виджет добавляется в my_canvas
, например, запись и ее родительобъявлен как my_canvas
. Когда я щелкаю по добавленному виджету, popup_frame.winfo_children()
(довольно разумно) не идентифицирует добавленный виджет как дочерний элемент popup_frame
и уничтожает фрейм.
Есть ли в tkinter функция, которую я могу использовать для проверкиесли виджет является потомком другого виджета или я вынужден вручную отслеживать каждый виджет, который я добавляю к popup_frame
?
Если есть более простой / альтернативный способ достижения того же результата, я бы такжеочень рад это слышать.