首页 文章

使用Tkinter打开唯一的辅助窗口

提问于
浏览
0

当我打开辅助窗口时,我遇到了麻烦 . 现在我只是用按钮创建一个顶层窗口,我需要打开相同的辅助窗口如果我单击按钮(不生成新实例) .

哪个是生成单个辅助窗口而不生成新窗口实例的更好方法?

我留下了我正在实际工作的代码:

import tkinter

class LogWindow():
    def __init__(self, parent):
        self.parent = parent
        self.frame = tkinter.Frame(self.parent)

class MainWindow(tkinter.Frame):
    def __init__(self, parent):
        tkinter.Frame.__init__(self, parent)
        self.parent = parent

        frame = tkinter.Frame(self, borderwidth=1)
        frame.pack(fill=tkinter.BOTH, expand=True, padx=5, pady=5)

        self.LogButton = tkinter.Button(frame, text="Log Viewer", command= self.openLogWindow)
        self.LogButton.grid(sticky=tkinter.E+tkinter.W)

        self.pack(fill=tkinter.BOTH,expand=True)

    def openLogWindow(self):
        self.logWindow = tkinter.Toplevel(self.parent)
        self.app = LogWindow(self.logWindow)

def main():
    global app, stopRead
    root = tkinter.Tk()
    root.geometry("300x300")
    app = MainWindow(root)
    root.mainloop()


if __name__ == '__main__':
    main()

也许我需要一个Toplevel类的单个实例并调用show并关闭以显示或隐藏辅助窗口 .

1 回答

  • 0

    最后经过一些测试后我发现了如何解决这个问题,这要归功于@furas响应和一些关于协议功能的Tkinter事件的调查 .

    我有这个:

    import tkinter
    
    logWindowExists = False
    
    class LogWindow():
        def __init__(self, parent):
            global logWindowExists, root
            logWindowExists = True
    
            self.parent = parent
            self.frame = tkinter.Frame(self.parent)
    
        def on_closing(self):
            global logWindowExists
            logWindowExists = False
            self.parent.destroy()
    
    class MainWindow(tkinter.Frame):
        def __init__(self, parent):
            tkinter.Frame.__init__(self, parent)
            self.parent = parent
    
            frame = tkinter.Frame(self, borderwidth=1)
            frame.pack(fill=tkinter.BOTH, expand=True, padx=5, pady=5)
    
            self.LogButton = tkinter.Button(frame, text="Log Viewer", command= self.openLogWindow)
            self.LogButton.grid(sticky=tkinter.E+tkinter.W)
    
            self.pack(fill=tkinter.BOTH,expand=True)
    
        def openLogWindow(self):
            if not logWindowExists:
                self.logWindow = tkinter.Toplevel(self.parent)
                self.app = LogWindow(self.logWindow)
                self.logWindow.protocol("WM_DELETE_WINDOW", self.app.on_closing)
            else:
                self.logWindow.deiconify()
    
    def main():
        global app, stopRead, root
        root = tkinter.Tk()
        root.geometry("300x300")
        app = MainWindow(root)
        root.mainloop()
    
    
    if __name__ == '__main__':
        main()
    

    使用布尔值来知道窗口是否存在我可以处理它打开或不打开的窗口,只显示现有窗口或创建一个新窗口 .

相关问题