假设我在 Tkinter 应用程序中创建了一个 Canvas 。
在 Canvas 中,我画了几个矩形。
本质上我想要的是知道用户点击了哪个矩形,这是我主要关心的问题,但这是我已经尝试过的并且我认为可能是解决方案。
这是我的布局:
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
函数执行。
假设 do 是这样的:
def do(event):
print "click"
不是每次单击矩形时我都会在控制台中得到“单击”。
我希望能够获取被点击的矩形的标签,以便能够执行如下操作:
def do(event):
print str(theTagOfTheClickedRectangle)
所以我检查了我可以调用哪些事件:
- 小工具
- x,y
- x_root, y_root
- 字符
- 键符
- 键码
- 数量
- 宽度、高度
- 输入
似乎都没有指出我点击了哪个矩形。
我想在这里为 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”的数学运算,并根据点击的坐标计算用户点击了哪个矩形,这个对于我正在尝试做的事情来说似乎过于复杂,尽管我以前做过并且它显然有效。
我希望问题很清楚,否则请要求任何澄清。
请注意,我不依赖于任何此代码,相反,我正在寻找解决此问题的方法,即使意味着不使用标签或其他类型的小部件或其他任何东西,最有效的方法也会起作用越容易。
最佳答案
你可以使用类似这样的东西来引用被点击的对象:
event.widget.find_withtag("current")
标签“current”比较特殊,代表鼠标下最上面的对象。
关于python - 单击时如何获取形状的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7602122/