天天看點

Python Tkinter界面應用開發-04 開始和結束

上節課,我們的界面已經搭好了,我們注意到,這裡的按鈕沒有任何指令,那麼這節課,我們來為這2個按鈕添加指令的處理。是以,當他們被點選時,我們給他們建立一個指令函數,是以,當start按鈕被點選時,我們需要建立一個新的函數來響應,當stop按鈕被點選時,我們需要另一個函數來響應,是以我們來到類的底部。定義一個啟動計時器的函數,我們想做的第一件事就是確定:每次啟動我們計時器時,計時器能夠設定回全長。是以我們需要重新把它設定回DEFAULT_GAP。

timer.grid(row = 1, column = 0, sticky ='nsew')
 
    def start_timer(self):        self.time_left.set(DEFAULT_GAP)      

接下來,我們要建立一個變量,來記錄計時器是否正在運作,是以在init函數中,我們添加一個新的變量self.running,并且它的初始值為false:

self.time_left.set(DEFAULT_GAP)
        self.running = False      

因為當我們的應用程式啟動時,定時器還沒有運作。但是,當我們回到start_timer函數,我們希望running現在等于true,因為計時開始了.是以running等于true。

def start_timer(self):
self.time_left.set(DEFAULT_GAP)
        self.running = True      

那麼現在,回到我們建立的start按鈕的地方,在這裡,我們添加按鈕指令的調用,這裡command将等于self.start_timer.

self.start_button = tkinter.Button(
build_frame,text = 'start',
            command = self.start_timer
)      

這裡我們不需要括号,因為當按鈕被點選時,它就會調用這個函數,好的,這就是我們現在的開始按鈕。

同樣地,讓我們繼續添加停止按鈕的指令響應:

self.stop_button = tkinter.Button(
build_frame,text='stop',
            command = self.stop_timer
)      

然後在類的底部定義stop_timer函數,我們希望stop_timer設定self.running等于False,因為當我們按下stop按鈕時,這時候應該停止計時:

def stop_timer(self):        self.running = False      

是以這就是我們要做的。

這裡我們運作看看效果。我點選開始,我點選停止。什麼事情都沒有發生,這是因為我們也沒做什麼事情。但是這個指令函數确實執行了。

那麼,實際上,這些按鈕有它們自己的狀态,你可以選擇禁用它。我們希望當計時器還沒有開始運作時,stop按鈕被禁用,當計時器運作時,start按鈕被禁用,對吧。是以,讓我們回到建立按鈕的的函數中。我們要確定stop按鈕是預設禁用的:

self.start_button.grid(row = 0, column = 0, sticky = 'ew')
self.stop_button.grid(row=0, column=1, sticky='ew')
        self.stop_button.config(state = tkinter.DISABLED)      

因為程式開始運作時,計時器還沒有開始計時,這時候stop按鈕應該被禁用,對嗎?運作下,你看,stop按鈕被禁用了:

那麼,同樣的道理。當我們點選開始時,我們希望恢複stop按鈕,這個時候,start按鈕也應該被禁用。

def start_timer(self):
self.time_left.set(DEFAULT_GAP)self.running = True
        self.stop_button.config(state = tkinter.NORMAL)        self.start_button.config(state=tkinter.DISABLED)      

緊接着,把這兩行複制,然後粘貼到他們stop按鈕的事件中。這裡和start按鈕的事件應該恰好相反:

def stop_timer(self):
self.running = False
        self.stop_button.config(state = tkinter.DISABLED)        self.start_button.config(state=tkinter.NORMAL)      

繼續閱讀