如何在 tkinter 中限制 Toplevel windows 的数量
How to limit number of Toplevel windows in tkinter
我有一些代码可以在用户身上创建一个顶级 window
按下一个按钮。
但是我想将顶层 windows 的数量限制为一个,这样用户就无法通过垃圾邮件按钮打开五十个 windows。
import tkinter as tk
class app():
def __init__(self,master):
self.master = master
master.configure(background = '#002e3d')
master.title('Test!')
master.geometry = master.geometry('660x550+200+200')
master.resizable(width = False,height = False)
self.button = tk.Button(master,text = 'Test'command = self.searchmenu)
self.button.pack()
def searchmenu(self):
Demo()
class Demo():
def __init__(self):
self.top = tk.Toplevel()
self.top.title('Search!')
def main():
root = tk.Tk()
window = app(root)
root.mainloop()
如果您引用您创建的 Demo
对象(无论如何我都会推荐),这将变得非常简单:
class app():
def __init__(self,master):
...
self.popup = None
def searchmenu(self):
if self.popup is None:
self.popup = Demo()
虽然一旦创建的 window 被销毁,这将不允许重新打开它,因此您可能还想检查顶部是否仍然存在 winfo_exists()
:
def searchmenu(self):
if self.popup is None or not self.popup.top.winfo_exists():
self.popup = Demo()
编辑:如果弹出窗口已经打开,那么按下按钮应该 lift
它到 window 堆栈的顶部:
def searchmenu(self):
if self.popup is None or not self.popup.top.winfo_exists():
self.popup = Demo()
else:
self.popup.top.lift(self.master)
我有一些代码可以在用户身上创建一个顶级 window 按下一个按钮。
但是我想将顶层 windows 的数量限制为一个,这样用户就无法通过垃圾邮件按钮打开五十个 windows。
import tkinter as tk
class app():
def __init__(self,master):
self.master = master
master.configure(background = '#002e3d')
master.title('Test!')
master.geometry = master.geometry('660x550+200+200')
master.resizable(width = False,height = False)
self.button = tk.Button(master,text = 'Test'command = self.searchmenu)
self.button.pack()
def searchmenu(self):
Demo()
class Demo():
def __init__(self):
self.top = tk.Toplevel()
self.top.title('Search!')
def main():
root = tk.Tk()
window = app(root)
root.mainloop()
如果您引用您创建的 Demo
对象(无论如何我都会推荐),这将变得非常简单:
class app():
def __init__(self,master):
...
self.popup = None
def searchmenu(self):
if self.popup is None:
self.popup = Demo()
虽然一旦创建的 window 被销毁,这将不允许重新打开它,因此您可能还想检查顶部是否仍然存在 winfo_exists()
:
def searchmenu(self):
if self.popup is None or not self.popup.top.winfo_exists():
self.popup = Demo()
编辑:如果弹出窗口已经打开,那么按下按钮应该 lift
它到 window 堆栈的顶部:
def searchmenu(self):
if self.popup is None or not self.popup.top.winfo_exists():
self.popup = Demo()
else:
self.popup.top.lift(self.master)