簡體   English   中英

Python Tkinter:標簽更新后按鈕消失

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

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