2012-09-07 176 views
0

我想使用Button小部件來拖動項目。如果我使用Label小部件,我可以綁定到小部件並獲取事件,但Button小部件似乎消耗了所有的鼠標事件。有任何想法嗎?如何將<B1-Motion>綁定到tkinter Button小部件?

背景:我創建了一個網格,每行有幾個按鈕可以做各種事情。我希望能夠通過點擊一個拖拽控件重新排序行,然後上下拖動這個控件(帶着整個行)。這裏是我的GUI:

+---+--------------+---+---+ 
|  Title   | + | 
+---+--------------+---+---+ 
| - | Label widget | = | > | 
+---+--------------+---+---+ 
| - | Label widget | = | > | 
+---+--------------+---+---+ 
| - | Label widget | = | > | 
+---+--------------+---+---+ 

「+」號按鈕,增加了一個行(通過彈出填寫數據),「 - 」是一個按鈕,刪除行「>」是一個按鈕,讓您可以編輯(通過彈出窗口)該行的數據。通過點擊並拖動「=」,您可以對行進行重新排序。目前,它是一個圖像標籤,但我希望它是一個像其他控件一樣的按鈕。

回答

0

按鈕小部件與其他小部件沒有區別,除了它已經具有某些事件的綁定(這意味着您需要禁用它們或準備好使用它們)。您仍然可以將任何想要的事件綁定到按鈕,但我質疑爲什麼要使用按鈕來達到此目的。大多數人不會期望能夠拖動一個按鈕 - 按鈕可以推動它,而不是拖動它。

如果是我,我會重新安排你的按鈕是這樣的:

+---+--------------+---+---+ 
|  Title   | + | 
+---+--------------+---+---+ 
| = | Label widget | > | - | 
+---+--------------+---+---+ 
| = | Label widget | > | - | 
+---+--------------+---+---+ 
| = | Label widget | > | - | 
+---+--------------+---+---+ 

然後,更改「=按鈕」是看起來像是你可以抓住的圖像。通常情況下,我看起來像有兩條或三條水平線的圖像,就好像給予「抓地力」一樣。另外,我認爲通過抓住一個終點而不是抓住中間某個地方來移動某些東西更爲常見。

現在你可以抓住左邊緣(這可以說是一種更自然的移動方式),並且所有的添加/刪除按鈕排列在同一列中。此外,編輯彈出式按鈕與正在編輯的對象緊密相連,這對我來說是有意義的。

你也可以考慮改變佈局看起來像這樣:

+---+--------------+---+---+---+ 
|    Title   | 
+---+--------------+---+---+---+ 
| = | Label widget | > | - | + | 
+---+--------------+---+---+---+ 
| = | Label widget | > | - | + | 
+---+--------------+---+---+---+ 
| = | Label widget | > | - | + | 
+---+--------------+---+---+---+ 

上述的優點是,它可以讓你在中間添加一個按鈕,而不是總是添加或刪除結尾,這意味着您的用戶可能會學習如何通過單擊而不是點擊和拖動來將行完全添加到他們想要的位置。

+0

正如我所說,我想要一個按鈕,因爲所有其他的東西都是按鈕。實際上,我一段時間都在使用圖片標籤處理所有事情,但複製標準的按鈕行爲佔用了我太多的時間。我的佈局鬆散地基於標準的iOS應用程序,其中「+」通常在右上角(當列表爲空時,它本身就很方便),而「 - 」本身在左側(大概是爲了減少意外敲擊)。我的所有按鈕都使用Tango圖標,如果出現問題,就會回到角色身上。感謝您的反饋。 – samwyse

相關問題