3 回答
TA贡献1797条经验 获得超4个赞
您可以使用winfo_parent
来获取小部件的父级。然后,您可以在父级和父级的父级等上调用它,以获取小部件的祖先。winfo_parent
返回一个字符串而不是父对象,但 tkinter 有办法将名称转换为小部件。
例如,要获取名为 的小部件的父小部件w
,您可以这样做:
parent = w.nametowidget(w.winfo_parent())
有了它,您可以沿着小部件的层次结构向上工作,当您到达根窗口时停止。
TA贡献2021条经验 获得超8个赞
我搞砸了一会儿,找到了已经提到的替代解决方案。
str(my_widget)
返回字符串路径my_widget
因此,例如,您可以通过简单地检查 ' 的路径是否以 ' 的路径开头来检查是否my_canvas
是 的后代。popup_frame
my_canvas
popup_frame
在 python 中,这很简单:
str(my_canvas).startswith(str(popup_frame))
TA贡献1790条经验 获得超9个赞
我使用winfo_children()andwinfo_parent()来标识子级和父级小部件/容器。请注意,单.指根窗口。
import tkinter as tk
class App(tk.Tk):
def __init__(self):
super().__init__()
frame1 = tk.Frame(self)
btn1 = tk.Button(self)
btn2 = tk.Button(self)
btn3 = tk.Button(frame1)
print('Root children widget are: {}'.format(self.winfo_children()))
print('frame1 children widget is: {}'.format(frame1.winfo_children()))
print('Button 1 parent is: {}'.format(btn1.winfo_parent()))
print('Button 2 parent is: {}'.format(btn2.winfo_parent()))
print('Button 3 parent is: {}'.format(btn3.winfo_parent()))
if __name__ == '__main__':
App().mainloop()
添加回答
举报