2010-11-13 37 views
0

我已經完成了一些搜索,但是找不到任何關於此主題的內容。也許是因爲它是常見的程序員知識(我不是程序員,我已經從必要性中學到了知識),或者因爲我錯誤地去了解它。如何在Tkinter中有效地處理按鈕狀態

我想就如何管理GUI的按鈕狀態提出意見/建議。例如,如果我有一個允許用戶導入和處理數據的程序,那麼某些功能應該是無法訪問的,直到數據成功導入,或者如果他們想要繪製某些數據,他們需要選擇要繪製的數據點擊'圖表'或'導出'按鈕。即使在我構建這些關係的簡單程序中,似乎很快就會變得複雜。看起來很簡單,「用戶不應該能夠點擊'A'按鈕直到'B'和'C'完成,然後'A'應該被禁用,如果按鈕'D'或'取消'按鈕。這是很多來跟蹤一個按鈕到目前爲止,我已經試過兩件事情:

  • 更改/在按鈕的回調函數檢查按鈕狀態,以便在上面的例子中,我將不得不代碼。按鈕B和C的回調來檢查是否應該啓用A,並且在按鈕D和Cancel的回調中,我將有代碼禁用按鈕A.這會變得很複雜並且很難在代碼更改時保持不變。在每個按鈕回調(或只是稍後使用cget()檢查狀態並檢查輪詢函數中的變量以確定應啓用或禁用哪些按鈕。

我只是不確定這一點。我希望代碼儘可能簡短易懂(稍後易於編輯),但我不喜歡每隔幾百毫秒輪詢所有按鈕狀態的想法,只是爲了管理按鈕。您可以將相同的想法擴展到複選框,菜單項等等,但是我想在這裏介紹其他人做了什麼,以及他們爲什麼要按照他們的方式來做。

回答

1

你只是根據事件改變按鈕狀態,對吧?沒有理由'輪詢'以查看按鈕狀態是否已經改變。你可以做的是建立一個功能,它可以完成所有的呼叫,然後用disable_buttons([okButton, graphButton, printButton])這樣的名稱來呼叫它。當發生修改相應用戶界面選項(如導入數據)的事件時,請使用另一個功能將其打開:enable_buttons([graphButton])。當然,您可以使用每個對象的方法來做到這一點,但是使用包裝器可以讓您在整個應用程序中保持一致。

相關問題