微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从该窗口小部件放置放置窗口小部件的根窗口?

如何解决如何从该窗口小部件放置放置窗口小部件的根窗口?

我正在创建一个基于Tkinter的GUI。我创建了一个自定义按钮小部件,我想从那里访问根(主)窗口。

我了解.master属性,可以使用它来实现所需的功能(请参见下面的代码)。但是因为按钮可能被放置在数十个帧的深处,所以我必须递归获取.master,直到获得None为止。我想知道是否有更干净的方法获取程序的主窗口?

import tkinter as tk


class MyButton(tk.Button):
    def __init__(self,*args,**kwargs):
        super().__init__(bg="white",**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将为您提供该小部件的根窗口。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。