使用Python自带的GUI库Tkinter实现组件的刷新:
python3版本中,Tkinter的主类在调用mainloop运行后就会进入无限循环状态,想要实现组件数据的同步与刷新,主要靠after函数来实现循环的更新
tk.after(time,fun)
其中time是每次循环的间隔时间,单位为毫秒(ms),fun为每次循环调用的函数,实现你想执行的刷新效果
现在通过一段简单的代码来展示after函数,该代码的作用是实现一个更新当前时间的变迁
import tkinter as tk
from tkinter import *
import time as cur_time
class MainWindow(tk.Tk):
def __init__(self, *args, **kw):
super().__init__()
self.geometry("730x400+700+400") # 设置窗口长宽和坐标
# 窗口标题
self.title('Label')
# 初始按钮,后面会被覆盖
self.label1 = Label(self, text='', width=70, height=10)
# 设置按钮位置
self.label1.grid(row=0, column=1)
# 调用after函数
self.after(100, self.refresh_data)
# 窗口显示
self.mainloop()
def refresh_data(self):
print('我在刷新')
# 需要刷新数据的操作,从time函数活的当前时间
self.label1 = Label(self, text=cur_time.time(), font=18, relief="solid", width=25, height=5, padx=2)
self.label1.grid(row=0, column=1, padx=15, pady=20)
# 递归循环调用after
self.after(100, self.refresh_data) # 这里的100单位为毫秒
if __name__ == '__main__':
MainWindow = MainWindow()
效果:
可以看到标签的内容一直在变化
总结:
after函数的调用并不难,只要多练习一下就能掌握
另外,Tk类提供的after方法不是循环的计时器,该函数相当于不会堵塞进程的sleep,需要循环计时的话,就再在函数里面再次调用after