Tkinter定时刷新页面或数据

1、说明

        由于tkinter一旦开始执行进入mainloop,就相当于进入一个界面死循环状态,出不来;如果想做定时刷新tkinter界面的控件数据,必须调用tkinter.TK()自带的after函数,这个函数可以设定定时执行某个任务的时间,使用别的python定时执行任务的模块是不行的。

2、使用方式

       实现一个刷新数据函数调用tkinter.TK()自带的after函数,在调用mainloop函数之前,将这个刷新数据函数调用,则可以实现定时刷新数据功能,参考代码如下:

import tkinter as tk

class Questions(tk.Tk):
    def __init__(self, *args, **kw):
        super().__init__()
        self.wm_title('CSSE1001 Queue')
        self.configure(background='white')
        self.wm_minsize(1440, 776)                  # 设置窗口最小化大小
        self.wm_maxsize(1440, 2800)                 # 设置窗口最大化大小
        self.resizable(width=False, height=True)    # 设置窗口宽度不可变,高度可变

        self.run()
        self.refresh_data()
        self.mainloop()
    
    def refresh_data(self):
        # 需要刷新数据的操作
        # 代码...

        self.after(10000, self.refresh_data)   # 这里的10000单位为毫秒

    def run(self):
        pass

if __name__ == '__main__':
    question = Questions()

3、额外补充别的定时执行任务程序

  •  介绍轻量级第三方模块schedule,需要使用 pip install schedule导入才能使用
  • 使用时功能相对于crontab
import schedule
import time
 
def job():
    print("I'm working...")
 
schedule.every(10).minutes.do(job)              # 每隔10分钟执行一次任务
schedule.every().hour.do(job)                   # 每隔一小时执行一次任务
schedule.every().day.at("10:30").do(job)        # 每天10:30执行一次任务
schedule.every(5).to(10).days.do(job)           # 每5-10天执行一次任务
schedule.every().monday.do(job)                 # 每周一的这个时候执行一次任务
schedule.every().wednesday.at("13:15").do(job)  # 每周三13:15执行一次任务
 
while True:
    schedule.run_pending()
    time.sleep(1)

猜你喜欢

转载自blog.csdn.net/u012089823/article/details/83009900
今日推荐