【问题标题】:make a button open only one window at a time (enable a button by closing a Toplevel window)使按钮一次只打开一个窗口(通过关闭顶层窗口来启用按钮)
【发布时间】:2013-12-05 22:33:04
【问题描述】:

我希望NewWinButton 一次只创建一个新窗口,这意味着如果

if NewWin.winfo_exists() == 1:
   NewWinButton.config(state='disabled')
else:
   NewWinButton.config(state='normal')

如果我在新窗口中添加一个按钮(本例中为QuitButton),我就可以完成这项工作:

import tkinter as tk

root = tk.Tk()
root.title('Main Window')
root.geometry('400x400')

def get_new_win():

    NewWin = tk.Toplevel(root)
    NewWin.title('New Window')
    NewWin.geometry('300x300')
    NewWinButton.config(state='disable')

    def quit_win():
        NewWin.destroy()
        NewWinButton.config(state='normal')

    QuitButton = tk.Button(NewWin,text='Quit', command=quit_win).pack()

NewWinButton = tk.Button(root,text='New Window', get_new_win).pack()

root.mainloop()

当且仅当我使用QuitButton 关闭新窗口时才有效;但是,如果我在新窗口中使用关闭按钮,那么 NewWinButton 将保持“禁用”状态。

谁能告诉我如何解决这个问题?

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    使用NewWin.protocol("WM_DELETE_WINDOW", quit_win) 将函数quit_win 分配给关闭按钮。

    import tkinter as tk
    
    root = tk.Tk()
    root.title('Main Window')
    root.geometry('400x400')
    
    def get_new_win():
    
        NewWin = tk.Toplevel(root)
        NewWin.title('New Window')
        NewWin.geometry('300x300')
        NewWinButton.config(state='disable')
    
        def quit_win():
            NewWin.destroy()
            NewWinButton.config(state='normal')
    
        QuitButton = tk.Button(NewWin, text='Quit', command=quit_win)
        QuitButton.pack()
    
        NewWin.protocol("WM_DELETE_WINDOW", quit_win) 
    
    NewWinButton = tk.Button(root, text='New Window', command=get_new_win)
    NewWinButton.pack()
    
    root.mainloop()
    

    顺便说一句:

    pack() 方法返回 None,而不是按钮实例:

    NewWinButton = tk.Button(...).pack()
    

    使用这个:

    NewWinButton = tk.Button(...)
    NewWinButton.pack()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      相关资源
      最近更新 更多