from tkinter import *
from tkinter.ttk import *
root = Tk()
first_run = True
def update(txt):
global first_run
text1 = Label(root, text='')
if first_run:
text1.pack()
text1['text'] = txt
first_run = False
update('1')
update('2')
update('3')
root.mainloop()
當我運行它時,文本保持在“1”,并且忽略以下 2 個函式呼叫。我發現只有當我再次使用 pack() 時它才會被更新,但它會創建一個重復的標簽,我不希望那樣。
當然,我知道我應該使用 StringVar,但是我一直在將這種方法用于所有其他小部件(按鈕、標簽框架等)并且它們都可以作業。我不知道為什么這個特殊情況不起作用。
在 Windows 11 上運行 Python 3.9.9
uj5u.com熱心網友回復:
您不是在更新標簽,而是在每次呼叫該函式時創建一個新標簽。要更新任何小部件,請使用configure方法。為此,您需要在函式外部創建標簽(或者,將其保留在函式中但添加邏輯,使其僅創建一次)。通常最好在函式外創建,這樣函式只負責更新。
from tkinter import *
from tkinter.ttk import *
root = Tk()
def update(txt):
text1.configure(text=txt)
text1 = Label(root, text='')
text1.pack()
update('1')
update('2')
update('3')
root.mainloop()
注意:由于您在繪制視窗之前多次呼叫您的函式,因此您只會看到最終值。這個網站上有很多解決方案。如果不了解您的真實程式是什么樣的,就很難推薦該問題的最佳解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/360447.html
