簡體   English   中英

Tkinter - 如何在 window 打開時禁用按鈕

[英]Tkinter - How to disable button when window opened

我是“Tkinter”庫的新手,我想知道如何在打開新的 window 時禁用按鈕。 例如,如果單擊主 window 上的一個按鈕,將打開一個新的 window,而主 window 上的所有按鈕將被禁用。 關閉 window 后,應再次重新啟用按鈕。

這是我的代碼示例:

from tkinter import *

root = Tk()

def z():
    w = Toplevel()

    bu = Button(w, text = "Click!", font = 'bold')
    bu.pack()

b = Button(root, text = "Click!", command = z)
b.pack()

root.mainloop()

額外:如果有人能告訴我如何在不關閉整個“Tkinter”程序的情況下關閉“root”window,我將不勝感激。 例如,如果第二個 window 打開,我希望能夠關閉第一個 window,或者至少最小化它。

您可以隱藏窗口

root.withdraw()

# or 

root.iconify()

並再次顯示

root.deiconify()

禁用按鈕

b['state'] = 'disabled' 

啟用按鈕

b['state'] = 'normal'

編輯:正如@acw1668 在評論中指出的那樣,當用戶在標題欄上使用關閉按鈕 [X] 時,它需要win.protocol()來運行close_second

import tkinter as tk # PEP8: `import *` is not preferred

#--- functions ---

def close_second():
    win.destroy()

    b['state'] = 'normal'

    root.deiconify()

def open_second():
    global win

    b['state'] = 'disabled'
    #root.iconify()
    root.withdraw()

    win = tk.Toplevel()

    win_b = tk.Button(win, text="Close Second", command=close_second)
    win_b.pack()

    # run `close_second` when user used closing button [X] on title bar
    win.protocol("WM_DELETE_WINDOW", close_second)

# --- main ---

root = tk.Tk()

b = tk.Button(root, text="Open Second", command=open_second)
b.pack()

root.mainloop()

您可以使用 .grab_set() 來禁用與主 window 的交互。您可以在單擊該按鈕時關閉 window,並在單擊另一個按鈕時重新打開最后一個 window,其中一個關閉,如下所示:

from tkinter import *

root = Tk()

def reopen():
    root.mainloop()
    w.withdraw()

def z():
    w = Toplevel()
    w.grab_set()
    bu = Button(w, text = "Click!", font = 'bold', command=reopen)
    bu.pack()
    root.withdraw()
    w.mainloop()

b = Button(root, text = "Click!", command = z)
b.pack()

root.mainloop() 

歡迎來到 Tkinter 圖書館。

我完成了為什么你使用那個 'w' 你可以只使用 root 並且它可以工作。

from tkinter import *
root = Tk()

def z():

    bu = Button(root, text = "Click!", font = 'bold')
    bu.pack()

b = Button(root, text = "Click!", command = z)
b.pack()

root.mainloop()

問我你是否在 python 和 tkinter 中遇到任何問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM