2024-10-06 12:04:11 发布
网友
我觉得Python编程可能不是我的专长。。。。在
我已经创建了一个tkinter GUI,它使用一个按钮回调来打开另一个窗口(其他搜索认为这个窗口应该是一个顶级窗口),它工作得很好,每次按下按钮都会打开另一个完全相同的(据我所知)窗口。在
问:如何测试窗口(用按钮打开)是否已经存在,从而防止生成重复项???在
注意:我还不是一个OOP程序员,所以如果可能的话,请避免这种模式。。。在
谨致问候
比尔W
您可以使用此方法winfo_exists()检查窗口是否存在。在
winfo_exists()
如果返回值为0,则表示窗口不存在。在
如果返回值为1,则表示窗口存在。在
示例代码。。。在
from tkinter import * mainWindow = Tk() mainWindow.title("This is main Window") # create a top-level window newWindow = Toplevel(mainWindow) newWindow.title("This is Toplevel window") print("Before destroying window = " + str(newWindow.winfo_exists())) newWindow.destroy() print("After destroying window = " + str(newWindow.winfo_exists())) mainloop()
输出是。。。在
I am not (yet) a OOP programmer so please avoid that paradigm if possible...
如果你想成功地用Python编程,迟早你必须了解面向对象编程。另一种方法(全局变量和函数无处不在)肯定不是一种好方法。即使是Tkinter也有很多类,它们都有各自的方法,所以看起来这对于您的目的是必要的。在
回到您的问题,一个解决方案可以是将顶层窗口设置为一个类的属性,在该类中封装所有应用程序,并且只有在该属性为None时才打开一个新窗口。要在关闭窗口时将此属性设置为None,可以使用^{}方法设置回调。在
这是一个小的工作示例,您可以看到它是如何工作的:
import Tkinter as tk class App(tk.Tk): def __init__(self): tk.Tk.__init__(self) self.button = tk.Button(self, text="Open a new window", command=self.openwindow) self.button.pack() self.toplevel = None def openwindow(self): if self.toplevel is None: self.toplevel = tk.Toplevel(self) self.toplevel.protocol('WM_DELETE_WINDOW', self.removewindow) def removewindow(self): self.toplevel.destroy() self.toplevel = None app = App() app.mainloop()
您可以使用此方法
winfo_exists()
检查窗口是否存在。在如果返回值为0,则表示窗口不存在。在
如果返回值为1,则表示窗口存在。在
示例代码。。。在
输出是。。。在
^{pr2}$如果你想成功地用Python编程,迟早你必须了解面向对象编程。另一种方法(全局变量和函数无处不在)肯定不是一种好方法。即使是Tkinter也有很多类,它们都有各自的方法,所以看起来这对于您的目的是必要的。在
回到您的问题,一个解决方案可以是将顶层窗口设置为一个类的属性,在该类中封装所有应用程序,并且只有在该属性为None时才打开一个新窗口。要在关闭窗口时将此属性设置为None,可以使用^{} 方法设置回调。在
这是一个小的工作示例,您可以看到它是如何工作的:
相关问题 更多 >
编程相关推荐