[英]Python tkinter: button disappearing after label update
我已經使用Python一段時間了,並使用GUI制作了一些應用程序。 在編寫新應用程序時,我遇到了一些tkinter行為,我認為這很奇怪。
考慮以下代碼:
from tkinter import *
root = Tk()
root.geometry('200x200')
label = Label(root, bg='green', text='0', font=('arial', 40, 'bold'))
label.place(x=0, y=0, width=200, height=200)
def add():
label['text'] = int(label['text']) + 1
if label['text'] == 10:
button.place_forget()
button = Button(root, command=add, text='+1', font=('arial', 20, 'bold'))
button.place(x=50, y=50, width=100, height=100)
root.mainloop()
如您所料,運行此代碼時,您將獲得一個帶有綠色背景和按鈕的小窗口。 按下按鈕10次后,它消失,並且窗口中顯示“ 10”。
當我為按鈕窗口小部件使用其他父窗口小部件時,會發生我遇到的問題。 例如,當我更改此行
button = Button(root, command=add, text='+1', font=('arial', 20, 'bold'))
至
button = Button(label, command=add, text='+1', font=('arial', 20, 'bold'))
用“標簽”代替“根”,我的圖形用戶界面只是小故障。 每當我按下按鈕時,它就會消失。 有時它會在幾秒鍾后重新出現,但有時僅當我嘗試單擊它時才重新出現。
經過更多測試后,我發現每次父標簽更新時按鈕都會消失。
我在想; 為什么會這樣呢? 並且有一種方法可以解決此問題,而無需使用“ root”作為按鈕的父對象(這會使我的應用程序更加復雜,或者至少會迫使我重新構建很多gui東西)
我試圖找到有關此問題的信息,但找不到任何信息。
我認為您沒有看到這種行為的充分理由。 我在OSX上看不到它,但是OSX上的按鈕的行為與其他平台有所不同。 最好使用標簽作為另一個窗口的父級,而不會看到這種閃爍。
一種可能的解決方法是,每當您重新配置標簽時,在按鈕小部件上調用lift
。 也許您的堆疊順序正在改變,導致標簽在按鈕上方。
最后,您是否知道可以使用具有相對坐標的place,並且即使沒有父/子關系,小部件也可以相對於其他小部件? 您似乎擔心,如果無法在父子關系中創建兩個小部件,則必須更改很多代碼。
例如,您可以這樣創建窗口小部件和呼叫place
:
button = Button(root, command=add, text='+1', font=('arial', 20, 'bold'))
button.place(in_=label, relx=0, rely=0, relwidth=1, relheight=100)
您需要確保堆疊順序正確。 最簡單的方法是簡單地確保在創建標簽后的某個時間創建了按鈕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.