我无法用python更新tkinter中的标签文本

我无法用python更新tkinter中的标签文本,python,tkinter,label,Python,Tkinter,Label,我正在尝试更新循环中的tkinter标签文本。 如果i,则标签文本不会用值更新。 下面是我的代码和它的输出,有人能帮助我为什么它不工作吗? 提前谢谢 import tkinter as tk import time from tkinter import messagebox class Test(): def __init__(self): self.root = tk.Tk() self.v = tk.StringVar() self.text

我正在尝试更新循环中的tkinter标签文本。 如果
i
,则标签文本不会用值更新。 下面是我的代码和它的输出,有人能帮助我为什么它不工作吗? 提前谢谢

import tkinter as tk
import time
from tkinter import messagebox
class Test():
   def __init__(self):
       self.root = tk.Tk()
       self.v = tk.StringVar()
       self.text='yo'
       self.v.set(self.text)
       self.label = tk.Label(self.root, text=self.v.get())
       self.root.after(500,self.callback)
       self.button = tk.Button(self.root,text="RUN Timer",command=lambda:self.runtimer(5))
       self.button.pack()
       self.label.pack()
       self.root.mainloop()
   def runtimer(self,n):
       messagebox.showinfo("information","Information")  
       print(n,' value of n')
       for i in range(0,int(n)):
               print(i)
               self.text=i
               print('value of text',self.text)
               time.sleep(1)
               self.root.after(500,self.callback)
   def callback(self):
       print('in callback')
       print(self.text)
       self.v.set(self.text) 
app=Test()
在回调中
yo
5 n的值
0
文本0的值
1
文本1的值
2
文本2的值
3
文本3的值
4
文本4的值
在回调中
4
在回调中
4
在回调中
4
在回调中
4
在回调中

4

问题是当您声明
Label()
标记时
StringVar()
创建一个可以操作文本的对象。
set()
get()
方法仅用于设置和检索值。调用
self.v.get()
时,您将获得StringVar的值。这相当于设置一个静态字符串。将此过程
self.v
固定到
标签
作为
textvariable
而不是将
self.v.get()
设置为
text

更正后的代码如下所示:

import tkinter as tk
import time
from tkinter import messagebox
class Test():
   def __init__(self):
       self.root = tk.Tk()
       self.v = tk.StringVar()
       self.text = 'yo'
       self.v.set(self.text)
       self.label = tk.Label(self.root, textvariable=self.v)
       self.root.after(500, self.callback)
       self.button = tk.Button(self.root, text="RUN Timer", command=lambda:self.runtimer(5))
       self.button.pack()
       self.label.pack()
       self.root.mainloop()

   def runtimer(self, n):
       messagebox.showinfo("information","Information")  
       print(n, 'value of n')
       for i in range(int(n)):
           print(i)
           self.text = i
           print('value of text', self.text)
           self.callback()
           time.sleep(1)

   def callback(self):
       print('in callback')
       print(self.text)
       self.v.set(self.text)
       self.root.update()

app=Test()

现在正在更新标签文本。但它只更新了数字4。我仍然得到和以前一样的输出。回调方法仅在循环结束时调用。你能帮忙吗?一个有效的解决方案是直接调用
self.callback()
,并在调用时强制更新窗口。我已经更新了代码以反映这些更改。