[英]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.