可以说我在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