Tkinter定時重新整理頁面或資料
阿新 • • 發佈:2019-02-17
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)