我无法在 python 中更新 tkinter 中的标签文本
i am not able to update the label text in tkinter in python
我正在尝试循环更新 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()
回调中
哟
n 的 5 值
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
到 Label
作为 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()
我正在尝试循环更新 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()
回调中
哟
n 的 5 值
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
到 Label
作为 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()