可以說我在Tkinter應用程序中創建了一個畫布。如何在點擊時獲取形狀的標籤
在畫布上,我繪製了幾個矩形。
我想要的本質是要知道用戶點擊了哪個矩形,這是我主要關心的問題,但這是我嘗試過的,我認爲可能是解決方案。
這是我的佈局:
for x in range(1,6):
for y in range(1,7):
tableNumber = y + 6*(x-1)
w.create_rectangle((table.xSeparation + table.width) * y - table.width,
(table.ySeparation + table.height) * x - table.height,
(table.xSeparation + table.width)*y,
(table.ySeparation + table.height) * x,
fill="brown", tags="table" + str(tableNumber))
w.tag_bind("table" + str(tableNumber), '<Button-1>', do)
因此,這僅僅是創建一個行和列的佈局矩形。
每個矩形都有一個table1
,table2
到table30
形式的特定標籤。
當我點擊矩形時,do
函數執行。
比方說,你是這樣的:
def do(event):
print "click"
沒有拿到在控制檯中的「點擊」在矩形的每一次點擊。
我希望能夠獲取單擊矩形的標籤,以便能夠做這樣的事情:
def do(event):
print str(theTagOfTheClickedRectangle)
所以我什麼事件檢查我可以叫它們是:
- 插件
- 的x,y
- x_root,y_root
- 炭
- 鍵符
- 鍵碼
- NUM
- 寬度,高度
- 型
無的似乎針點我點擊了什麼矩形。
我考慮增加更多的參數給do
功能在這裏:
w.tag_bind("table" + str(tableNumber), '<Button-1>', do(event, tag))
但是,這似乎並沒有很好地工作,但也許我不會做do
權:
do(event, tag): #this doesn't work at all!!
print event.x
print tag
我希望這個問題很明顯,如果我以同樣的方式獲得標籤,就可以獲得事件的'x'和'y',那樣會很舒服。
我現在想到的唯一的實際解決方案是計算'event.x'和'event.y'的數學,並根據點擊的座標計算用戶點擊了哪個矩形,這似乎過於複雜,我想要做的,雖然我已經做到了,它顯然工作。
我希望這個問題是清楚的,其他明智請向任何澄清。
請注意,我不依賴於任何這段代碼的,相反,我正在尋找這個問題的解決方案,最有效的將工作,即使不使用標籤的手段,或其他類型的控件或任何的是更容易。
謝謝@Bryan!這是一個非常簡單和正確的解決方案!我檢查了你的個人資料,你似乎對tkinter有相當多的瞭解。我可以問你經常使用哪些文件嗎?我喜歡tkinter的簡單性,但我發現它的文檔非常不完整。例如,你所建議的答案在我使用過的任何文件中都沒有提及。非常感謝你! – Trufa
@Trufa:對於相關的傳統知識工具包信息的權威網站是在http://tcl.tk/man/tcl8.5/TkCmd/contents.htm官方手冊頁。這些對於Tcl語言來說是特定的,但是將信息適配到tkinter是一個非常簡單的思維轉換。有關特定於tkinter的信息,請訪問http://effbot.org/tkinterbook/(以及該站點FWIW上提及的「當前」標籤)。最後一個帶有一些有用信息的網站是http://www.tkdocs.com,它覆蓋了python,perl,tcl和ruby。 –
非常感謝!我不知道Tcl的一個,我會檢查出來,其他的是那些通常在谷歌搜索中出現的。我無法相信我錯過了列表框中的「當前」,可能是因爲我不知道我在找什麼。無論如何,再次感謝! – Trufa