我正在创建一个弹出消息,如果用户在弹出窗口的框架之外单击,该消息就会消失。要检查用户是否在框架外单击,代码如下所示:
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?
如果有更简单/替代的方法来实现相同的结果,我也会很高兴听到它。
繁星coding
宝慕林4294392
富国沪深
相关分类