1. 程式人生 > >Tkinter定時重新整理頁面或資料

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)