正在更新 python/tkinter 标签小部件吗?
- 2025-02-14 09:49:00
- admin 原创
- 47
问题描述:
我正在努力让 python/tkinter 标签小部件更新其内容。根据今天早些时候的线程,我按照有关如何组合小部件的说明进行操作。然而,在运行时,标签小部件不会更改内容,而只是保留其原始内容。据我所知,decrement_widget() 从未被调用过。有什么想法吗?
def snooze (secs):
"""
Snoozes for the given number of seconds. During the snooze, a progress
dialog is launched notifying the
"""
root = Tkinter.Tk()
prompt = 'hello'
label1 = Tkinter.Label(root, text=prompt, width=len(prompt))
label1.pack()
remaining = secs
def decrement_label ():
text = "Snoozing %d sec(s)" % remaining
remaining -= 1
label1.config(text=text, width=100)
label1.update_idletasks()
for i in range(1, secs + 1):
root.after(i * 1000, decrement_label )
root.after((i+1) * 1000, lambda : root.destroy())
root.mainloop()
解决方案 1:
textvariable
您需要使用来设置标签StringVar
;当 发生StringVar
更改(通过调用myStringVar.set("text here")
)时,标签的文本也会更新。是的,我同意,这是一种奇怪的做法。
有关更多信息,请参阅Tkinter Book :
您可以将 Tkinter 变量与标签关联。当变量的内容发生变化时,标签会自动更新:
v = StringVar() Label(master, textvariable=v).pack() v.set("New Text!")
解决方案 2:
我认为您收到了“赋值前引用”错误,因为 Python 认为remaining
它是在本地范围内。
在 Python 3 中,你可以说nonlocal remaining
。但在 Python 2 中,我认为没有办法引用非本地、非全局范围。这对我来说有效:
remaining = 0
def snooze (secs):
"""
Snoozes for the given number of seconds. During the snooze, a progress
dialog is launched notifying the
"""
global remaining
root = Tkinter.Tk()
prompt = 'hello'
label1 = Tkinter.Label(root, text=prompt, width=len(prompt))
label1.pack()
remaining = secs
def decrement_label ():
global remaining
text = "Snoozing %d sec(s)" % remaining
remaining -= 1
label1.config(text=text, width=100)
label1.update_idletasks()
for i in range(1, secs + 1):
root.after(i * 1000, decrement_label )
root.after((i+1) * 1000, lambda : root.destroy())
root.mainloop()
解决方案 3:
import tkinter
from tkinter import *
# just init some vars
remaining = 0
secs = 0
root = tkinter.Tk()
prompt = StringVar()
def snooze (secs):
"""
Snoozes for the given number of seconds. During the snooze, a progress
dialog is launched notifying the
"""
def decrement_label ():
global remaining, prompt
remaining -= 1
prompt.set('Snoozing %d sec(s)' % remaining)
label1.update_idletasks()
if not remaining:
print("end ... ")
root.destroy()
global remaining
prompt.set("hello")
label1 = tkinter.Label(root, textvariable=prompt, width=30)
label1.pack()
remaining = secs
for i in range(1, secs + 1):
root.after(i * 1000, decrement_label )
snooze(10)
root.mainloop()
解决方案 4:
要更新标签中的文本,您可以尝试以下操作:
from tkinter import *
root = Tk()
root.title("Title")
root.geometry('300x300')
def clear_text(self):
txtE.delete(0, 'end')
def new_label(event=None):
Entree = txtE.get()
lbl1['text'] = Entree.title()
clear_text(txtE)
lbl1 = Label(root, text='Hello There')
lbl1.pack()
txtE = Entry(root)
txtE.focus()
txtE.pack()
Button(root, text='Enter', command=new_label).pack()
Button(root, text='Quit', command=root.destroy).pack(side=BOTTOM)
root.bind('<Return>', new_label)
root.mainloop()
解决方案 5:
我认为你必须调用snooze(secs)
函数
此后,如果您的代码再次不起作用,请尝试此操作
设置变量
Variable = StringVar()
在标签小部件中,您可以将“textvariable”参数设置为上面提到的“变量”。
例如:label1 = Label(root,textvariable = Variable).pack()
您可以通过为“变量”设置新值来进行更新
例如:Variable.set("hi")
希望你收到它!
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD