繁体   English   中英

用Tkinter打开唯一的辅助窗口

[英]Open unique secondary window with Tkinter

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

哪种方法可以生成单个辅助窗口而不生成新的窗口实例?

我留下了我实际上正在处理的代码:

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()

也许我需要一个顶级类的单个实例,然后调用show和close来显示或隐藏辅助窗口。

最终,经过一些测试,由于@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()

使用布尔值知道窗口是否存在,我可以处理窗口何时打开或不打开,而仅显示现有窗口或创建一个新窗口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM