您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何在Tkinter中定義和使用自己的定時器”,在日常操作中,相信很多人在如何在Tkinter中定義和使用自己的定時器問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何在Tkinter中定義和使用自己的定時器”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
GUI程序除了要接受用戶操作并提供必要的反饋之外,還經常需要自發地進行一些處理。對于大部分開發語言來講引入一個定時器通常是最簡單的選擇。
下面的代碼就是利用Tkinter控件的after功能實現的一個可復用的Timer類。
class Timer:
def __init__(self, wnd, ms, call):
self.__wnd = wnd
self.__ms = ms
self.__call = call
self.__running = False
def start(self):
if not self.__running:
self.__wnd.after(0, self.__on_timer)
self.__running = True
def stop(self):
if self.__running:
self.__running = False
def is_running(self):
return self.__running
def __on_timer(self):
if self.__running:
self.__call()
self.__wnd.after(self.__ms, self.__on_timer)
用戶可以在Timer對象初始化時指定窗口對象,定時時間和定時時間到時執行的處理。當用戶調用start方法啟動定時器時,定時器類會以自身的__on_timer方法為參數調用窗口對象的after方法。當定時時間到了之后,這個__on_timer方法會被調用,這時用戶通過初始化方法指定的處理首先會被執行,然后啟動窗口的after方法會被再次調用并在定時時間后觸發__on_timer方法。只要__running為True,__on_timer方法就會被不斷地觸發,直至用戶調用stop方法為止。
我們以一個數字式時鐘為例,介紹這個Timer類的用法:
class DigitalClock:
def __init__(self, canvas, width, height):
self.canvas = canvas
self.width = width
self.height = height
# create font
ftDate = Font(family='Times', size=32)
self.canvas.create_text(width / 2, height / 4,
text='',
font=ftDate,
tag='date')
ftTime = Font(family='Times', size=64)
self.canvas.create_text(width / 2, height / 2,
text='',
font=ftTime,
tag='time')
def update(self):
time_str = time.strftime('%Y.%m.%d %a', time.localtime())
self.canvas.itemconfigure('date', text=time_str)
time_str = time.strftime('%H:%M:%S', time.localtime())
self.canvas.itemconfigure('time', text=time_str)
DigitalClock在初始化時構建了一大一小兩個Text對象分別用于顯示時間和日期信息。當用戶調用update方法時,DigitalClock獲得系統時間并更新這兩個Text對象的內容。
接下來的主程序就簡單了:
# create the main windowroot = Tk()# create canvascanvas = Canvas(root, height= 400, width= 400)canvas.grid(row=0, column=0)clock = DigitalClock(canvas, 400, 400)timer = Timer(root, 1000, clock.update)timer.start()root.mainloop()timer.stop()
構建時鐘類,定時器類并將時鐘類類的update方法指定為定時器類的處理參數就可以了。
到此,關于“如何在Tkinter中定義和使用自己的定時器”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。