【问题标题】:How to know which frames are on top (aka after tkraise)?如何知道哪些帧在顶部(又名 tkraise 之后)?
【发布时间】:2019-06-16 04:47:12
【问题描述】:

我正在使用 Tkinter 制作一个 GUI,并且需要知道哪个框架在顶部,因此其中一个降低的框架不会进入其循环之一并更改一些设置。

我已经试过了

self.tk.eval('frame stackorder '+str(self.frames["StartPage"])+' isabove '+str(self.frames["Wallpaper"]))=='1'

self 是我的根(它的一个类)并得到这个错误

_tkinter.TclError: bad window path name "stackorder"

还有

self.tk.eval('wm stackorder '+str(self.frames["StartPage"])

给我这个错误:

_tkinter.TclError: window ".!frame.!startpage" isn't a top-level window

这是我在帧之间创建和更改的方式

self.frames = {}
        for F in (StartPage, PageOne, PageTwo):
            page_name = F.__name__
            frame = F(parent=container, controller=self)
            self.frames[page_name] = frame

            # put all of the pages in the same location;
            # the one on the top of the stacking order
            # will be the one that is visible.
            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame("StartPage")

    def show_frame(self, page_name):
        '''Show a frame for the given page name'''
        frame = self.frames[page_name]
        frame.tkraise()

我从这里(Switch between two frames in tkinter)采取了改变框架的方式,但不知道如何知道哪个在上面。

【问题讨论】:

    标签: python python-3.x tkinter


    【解决方案1】:

    您可能应该保留对可见框架的引用,以便您可以访问它:

    class App(tk.Tk()):
        def __init__(self, ...):
            ...
            self.visible_frame = "StartPage"
            ...
    
        def show_frame(self, page_name):
            '''Show a frame for the given page name'''
            frame = self.frames[page_name]
            frame.tkraise()
            self.visible_frame = page_name
    

    【讨论】:

    • 谢谢 我不知道我怎么没想到的。
    • 非常受欢迎 - 坦率地说,我认为 tkinter 应该有一个方法来查询可见框架。
    猜你喜欢
    • 2021-09-22
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多