2015-10-19 55 views
-1

我在tkinter/ttk中開發了一個用戶界面,它使用標準的ttk.Button小部件來使用'command'參數調用各種函數。問題是,如果用戶雙擊一個按鈕,該功能被調用兩次。這會導致各種問題。雙擊事件沒有綁定任何東西,所以有沒有辦法禁用第二次單擊?我在函數定義的開始處嘗試了time.sleep()和after(),但是我還沒有找到使它工作的方法。我是否需要手動將每個功能綁定到每個按鈕的點擊並重新分配事件處理程序?任何直接的方法可以忽略整個棋盤上的雙擊?當用戶雙擊一個按鈕時,防止函數被調用兩次?

回答

4

只要告訴按鈕的回調函數(其command)禁用該按鈕,然後在短暫的時間(此處爲200ms)後將其恢復正常。

def callback(self): 
    self.my_button.config(state=tk.DISABLED) 
    self.root.after(200, lambda: self.my_button.config(state=tk.NORMAL)) 
    # other actions 

正如布賴恩指出的那樣,這是更好和更簡單的只是等待,直到功能完成(除非你只是想防止意外雙擊,並且與功能沒關係被再次調用它一定完成之前) :

def callback(self): 
    self.my_button.config(state=tk.DISABLED) 
    # other actions 
    self.my_button.config(state=tk.NORMAL) 

此示例代碼假定的import tkinter as tk進口,一個面向對象的應用程序的結構,稱爲self.my_button按鈕,稱爲self.callback一個回調函數,並稱之爲self.root一個根對象。

+0

而不是在200ms後將其更改回來,只要功能完成,就可以將其更改回去。這稍微安全一些,因爲它也可以防止慢速雙擊。 –

+0

@BryanOakley--這是一個很好的觀點。 – TigerhawkT3

相關問題