python - Tkinter:经过一定时间后如何更新标签文本?
问题描述
所以,我正在尝试创建一个基本的 Tkinter 程序,当我按下按钮时,它会更新标签字段上的文本,等待 X 秒,然后再次更新标签。
例如:
我单击按钮,标签在按下后立即清除,然后程序等待 3 秒并在屏幕上显示“Hello”。
下面显示的代码没有做我想做的事情,因为当我按下按钮时,它会保持按下 X 时间,然后文本会立即更新。我想按下按钮,清除标签,等待 3 秒钟,然后在屏幕上显示“你好”。
from tkinter import *
class Origin:
def __init__(self):
self.root = Tk()
self.root.geometry('800x600')
self.root.config(bg="black")
self.v = StringVar()
self.v.set('O R I G I N')
self.main_label = Label(self.root, textvariable=self.v, font="Arial 40", fg="white", bg="black")
self.main_label.place(x=240, y=150)
self.clear = Button(self.root, text='Clear', command=self.clear)
self.clear.place(x=400, y=400)
self.root.mainloop()
def clear(self):
#just to clear the string
self.v.set('')
self.root.after(3000, self.v.set('Hello'))
def main():
App = Origin()
if __name__ == '__main__':
main()
解决方案
after
需要callback
- 这意味着没有()
和参数的函数名称。如果必须使用带参数的函数,请使用 `lambda
after(3000, lambda:self.v.set('Hello'))
或创建不需要参数的函数
def callback():
self.v.set('Hello')
self.root.after(3000, callback)
您当前的代码就像
result = self.v.set('Hello')
self.root.after(3000, result)
它立即执行函数self.v.set('Hello')
并使用其结果,如callback
.after()
编辑:正如@acw1668 在评论中所说,您也可以通过这种方式运行带有参数的函数
self.root.after(3000, self.v.set, 'Hello')
推荐阅读
- heroku - Strapi 部署到 Heroku
- google-sheets - 如果在四列的非连续范围谷歌表格中不为空,则连续计数单元格
- python - 保留值 Dash 选项卡
- java - JPA查询JOINED表
- ios - 将数据存储在模型中以便在 Swift 中进行比较
- javascript - 从 HTML 中删除标签
- javascript - 角度 8 中 Math.floor(Math.random()*10) 的替代方案
- sql - 金额少于 200 多长时间
- c# - Agora.io - 当其他用户离开频道并重新加入时,其他用户的视频流挂起/停止更新
- java - 无法解决方法“setDisplayMode”(int,int,boolean)