当前位置: 首页 > 知识库问答 >
问题:

更新标签中的变量

锺离声
2023-03-14

谁能帮我解决这个问题,或者给我指出正确的方向?

我正在使用Python 3.9.7

我的目标是创建一个python程序,使用Tkinter显示两个变量之间的时间差,我希望这个变量在倒计时时每秒更新一次。

我已经创建了TK窗口,其中显示了标题文本和timedif标签,但是当我的程序运行时,timedif标签不会更新。Timedif标签仅显示程序执行时的timedelta。

我定义了一个函数countdown_update打算使用。后方法每1000ms更新一次倒计时,然后包含一个打印语句来直观地看到函数被调用。我可以在终端中看到打印声明,我的标签不更新。我不确定如何解决这个问题。

'''

from tkinter import * 
from datetime import datetime


#datetime.date = Year, Month, Day
#datetime.time = hour, minute, second
#datetime.datetime = Y,M,D,H,M,S,MS

#Declaration of variables
future_day = datetime(2022, 1, 7, 17, 0, 0, 555555)
today = datetime.today()
timediff = future_day - today

#Creating the TK Window
window = Tk()

# setting geometery of the window
window.geometry("500x300")

#Using title() to display a message in the dialogue box of the message in the title bar
window.title("Time until future day")

#adding a label to the window
Header = Label(window, background="black", text="Time Remaining", bg="purple", 
fg="black", font="none 24 bold")
Header.config(anchor=CENTER)
Header.pack(pady=20, ipadx=10, ipady=10)

#adding the timer to the window
timedif_label = Label(window, text=timediff, bg="black", fg="purple", font="none 28 
bold")
timedif_label.config(anchor=CENTER)
timedif_label.pack(pady=20,padx=20)

def countdown_update():
    timedif_label.after(1000, countdown_update)
    print("update finished")


#execute Tkinter
countdown_update()
window.mainloop()
    

'''

任何帮助都将不胜感激,谢谢。

共有1个答案

郗亦
2023-03-14

修改tkinter文本不是通过引用“正常”变量来完成的。Tkinter为这种情况提供了自己的变量版本。

因此,要更改文本,您需要使用StringVar()。在你的情况下,我建议像这样改变你的timedia ff var:

timediff = tk.StringVar(str(future_day - today))

像这样更改您的标签(请注意文本现在是文本变量):

timedif_label = Label(window, textvariable=timediff, bg="black", fg="purple", font="none 28 
bold")

最后像这样改变你的countdown_update:

def countdown_update():
    timediff.set(str(new_time)) #insert calculations here
    timedif_label.after(1000, countdown_update)   
    print("update finished")

所以你设置了tkinter StringVar,这应该会改变标签中显示的文本

有关更多详细信息,请查看以下内容:https://www.delftstack.com/howto/python-tkinter/how-to-change-the-tkinter-label-text/

 类似资料:
  • 问题内容: 我有一个活动,该活动的TabHost包含一组TabSpec,每个TabSpec都有一个listview,其中包含要由该选项卡显示的项目。创建每个TabSpec时,我设置一个图标以显示在选项卡标题中。 TabSpec是通过以下方法创建的,该方法循环创建适当数量的选项卡: 有几个实例,我希望能够更改程序执行过程中每个选项卡中显示的图标。目前,我正在删除所有选项卡,并再次调用上述代码以重新创

  • 我有一个标签,这是使用了多次在我的网页。它工作得很好,直到我尝试按Ajax更新标签。结果:只有第一个标签得到更新。这是一个已知的问题吗?我不确定,因为我不能打开JIRA页面:https://issues.apache.org/JIRA/browse/wicket(一直在跳)。我使用的是wicket 7.3.0版本 =>只更新第一个标签。我有一个解决办法,通过添加4个不同的标签实例与相同的文本内容。

  • 我无法从其他类更改标签的文本。我需要不断更新主屏幕上的日期和时间,而我也可以同时执行其他功能。我使用了一个TimeSetting类,它扩展了Thread,在它的run()方法中,我使用setText()在无限循环中调用了updation命令,然后让该方法Hibernate一秒钟。但是在运行这个时,什么也没有发生,在关闭输出窗口时,我得到一个错误,说NullPointerExcpetion 下面是两

  • 对来说非常陌生,对控制器的工作方式缺乏一点了解,但现在就开始了。 我的问题很简单。我需要在运行时更新屏幕上的。 这个问题以前在这个网站上已经解决过: Java FX更改标签文本 Java FX更改标签文本2 传递参数 还有,这些链接描述的是同样的事情,但做的不同吗? 最后,具有应设置为的值的类: 我研究了依赖注入,尝试绑定和传递参数,但得到了相同的结果。我知道这是直截了当的,任何帮助都很感激!谢了

  • 我想在我的应用程序中添加一个时钟,它告诉你已经做了多长时间的任务。为了简化它,我包含了一个计数器,它在新线程中每秒递增一次,并用计数器号更新标签“Set Timer”。为此,我在我的.fxml文件中有一个标签fx:id=“settimer”,并将其导入到我的类中。 我试过很多方法来解决我的问题,但我还没有找到正确的方法。我对我想做什么的想法应该很清楚,如果有人能帮助我,我会很高兴的。我的问题是更新

  • 当我想用帖子的现有标签编辑帖子时,它只显示一个标签,尽管所选帖子中有更多标签。我还想在后期编辑刀片中输入新标签。 后期创建代码 **post控制器中的post更新代码** **后期编辑刀片的标签代码**