python - 如何从该小部件获取放置小部件的根窗口?
问题描述
我正在创建一个基于 Tkinter 的 GUI。我创建了一个自定义按钮小部件,我想从那里访问根(主)窗口。
我知道这个.master
属性,我可以用它来实现我想要的(见下面的代码)。但是因为按钮可能放置在几十帧的很深处,所以我必须递归地获取 .master 直到我得到None
. 我想知道是否有更清洁的方法来获取程序的主窗口?
import tkinter as tk
class MyButton(tk.Button):
def __init__(self, *args, **kwargs):
super().__init__(bg="white", *args, **kwargs)
root_window = self.master
while root_window.master:
root_window = root_window.master
assert isinstance(root_window, tk.Tk)
# in my particular case, the above code is equivalent to this:
assert isinstance(self.master.master.master.master, tk.Tk)
# but I'd like to be able to use something like that:
# assert isinstance(self.root_window, tk.Tk)
root = tk.Tk()
frame1 = tk.Frame(root)
frame2 = tk.Frame(frame1)
frame3 = tk.Frame(frame2)
my_btn = MyButton(frame3)
for widget in (frame1, frame2, frame3, my_btn):
widget.pack()
root.mainloop()
解决方案
调用winfo_toplevel
任何小部件将为您提供该小部件的根窗口。
推荐阅读
- command-line-interface - Git bash 总是运行 'export PATH=$PWD/node_modules/.bin:$PATH'
- nestjs - 如何在类验证器 NestJS 中删除自定义消息中的字段名称
- google-cloud-platform - 使用 HttpsOTAUpdate 从 GCS 下载二进制文件
- c++ - 寻找一种方法来实现 main 以使我的等待列表程序正常运行
- c# - 氧绘图条宽度
- automation - 如何使用 UIA2 或 UIA3 访问 FlaUI 未读取的元素?
- javascript - 尝试发送 USDC 时无法获取钱包签名者 @solana-labs/web3.js
- c++ - c++随机数,均匀分布
- javascript - 我想计算数组中匹配的相邻项目并返回计数
- android - Flutter 应用程序:如何在新版本更新中替换或不替换 /assets 文件?