簡體   English   中英

你怎么綁定 <B1-Motion> 到tkinter Button小部件?

[英]How can you bind <B1-Motion> to a tkinter Button widget?

我想使用一個按鈕小部件來拖動一個項目。 如果我使用Label小部件,則可以綁定到該小部件並獲取事件,但是Button小部件似乎占用了所有鼠標事件。 有任何想法嗎?

背景:我正在創建一個網格,其中每一行都有幾個按鈕來執行各種操作。 我希望能夠通過單擊拖動小部件,然后上下拖動小部件(將整行攜帶在一起)來對行進行重新排序。 這是我的GUI:

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

“ +”是添加行的按鈕(通過彈出窗口填充數據),“-”是刪除行的按鈕,“>“是允許您(通過彈出窗口)編輯行數據的按鈕。 通過單擊並拖動“ =”,可以對行進行重新排序。 當前,它是一個圖像標簽,但我希望它像其他控件一樣是一個按鈕。

按鈕小部件與任何其他小部件都沒有什么不同,除了它已經為某些事件綁定(這意味着您需要禁用它們或准備使用它們)。 您仍然可以將想要的任何事件綁定到按鈕,盡管我質疑您為什么要為此目的使用按鈕。 大多數人不會期望能夠左右拖動按鈕-按鈕提供了能夠推動而不是拖動的能力。

如果是我,我將重新排列您的按鈕,使其如下所示:

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

然后,將“ =按鈕”更改為看起來像可以抓取的圖像。 通常,我看起來圖像中有兩條或兩條水平線,好像要給“抓地力”。 另外,我認為通過抓住末端來移動某些東西比抓住中間的某個地方更常見。

現在,您可以抓住左邊緣(可以說是一種更自然的移動方式),所有添加/刪除按鈕都在同一列中排列。 另外,“編輯”彈出按鈕緊靠正在編輯的對象,這對我來說很有意義。

您還可以考慮更改布局,如下所示:

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

上述的優點是,它可以讓你在中間添加一個按鈕,而不是總是添加或刪除結尾,這意味着你的用戶可能學習到能夠准確地添加行,他們希望有一個點擊,而不是點擊和阻力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM