gpt4 book ai didi

Python tkinter : loop in Label

转载 作者:行者123 更新时间:2023-11-28 21:27:17 29 4
gpt4 key购买 nike

您好,我只是希望在循环期间更改/刷新标签,但它不起作用

这是我的代码

fen1 = Tk()

v = StringVar()
Label(fen1,textvariable=v).pack()

i=0

while(1):
i=i+1
v.set(i)
fen1.mainloop()

谢谢

最佳答案

在这里,试试这个:

from Tkinter import *
import time
root=Tk()

variable=StringVar()

def update_label():
i=0
while 1:
i=i+1
variable.set(str(i))
root.update()

your_label=Label(root,textvariable=variable)
your_label.pack()
start_button=Button(root,text="start",command=update_label)
start_button.pack()
root.mainloop()

那应该给你一个很好的例子。但是,需要注意的是,在 while 循环期间,您必须调用 root.update()否则你的 GUI 将卡住直到循环完成(在这种情况下它永远不会)并且永远不会显示你的数字。

另请注意,您可以调用 update_label()从您程序中的任何位置。出于示例目的,我只是将它添加到开始按钮。

您的代码有什么问题是您将 while 循环设置为自由 float ,最重要的是在您的 GUI 的主循环之前。当你这样做时,由于这个循环是无限的,它永远不会允许 Tkinter开始其 mainloop() .但是,如果您将 while 循环放在主循环之后,那么直到您退出 GUI 之后才会执行,这是因为主循环在它停止(关闭 GUI)之前是无限的。

因此,要解决此问题,您只需将其放入一个函数中,稍后在 Tkinter 期间调用它。的主循环。您也可以通过多种方式执行此操作,例如,您可以使用 .after()在一定时间后执行特定任务,或使其成为按下时要运行的按钮的命令等。 .

但是,您应该使用的正确代码如下,因为您真的不希望代码中出现无限循环(除主循环之外)。:
class App (object):
def __init__(self):
self.root=Tk()
self.variable=StringVar()
self.i=0
self.your_label=Label(self.root,textvariable=self.variable)
def grid(self):
self.your_label.pack()
def update_label(self):
self.i=self.i+1
self.variable.set(str(self.i))
self.root.after(20,self.update_label)
def run(self):
self.grid()
self.root.after(20,self.update_label)
self.root.mainloop()

if __name__=='__main__':
App().run()

关于Python tkinter : loop in Label,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11303200/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com