仅打开一个 Tk.Toplevel 窗口

g0d*_*t3r 0 python tkinter

我将新窗口(Tk.Toplevel)的打开绑定在按钮上。但是,如果我按两次按钮,则会打开两个窗口。我可以停用按钮直到新窗口关闭,或者如果按两次按钮则显示消息框吗?

Jac*_*Pro 5

如果您不想导入外部库。您可以简单地检查 root 是否包含任何Toplevelusing的实例isinstance()

这是一个例子:

from tkinter import *
from tkinter import messagebox 


def top():
    
    if not any(isinstance(x, Toplevel) for x in root.winfo_children()):
            top = Toplevel(root)
            lbl = Label(top, text='TopLevel')
            lbl.pack()    
             
    else:
        
        messagebox.showinfo("showinfo", "Top level already exists")
        
    

root = Tk()

btn = Button(root, text='text', command=top)
btn.pack()

root.mainloop()

Run Code Online (Sandbox Code Playgroud)

如果您只是想禁用该按钮。

from tkinter import *
from tkinter import messagebox 


def top():

 
        btn['state'] = 'disabled'
        top = Toplevel(root)
        lbl = Label(top, text='TopLevel')
        lbl.pack()

        top.protocol("WM_DELETE_WINDOW", lambda : btn.configure(state='normal') or top.destroy())


                
root = Tk()

btn = Button(root, text='text', command=top)
btn.pack()

root.mainloop()
Run Code Online (Sandbox Code Playgroud)