假设我在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
到{
当我单击矩形时,do
函数将执行。在
比如说do是这样的:
^{pr2}$不是的,我在控制台中的每一次点击都会得到一个“点击”。在
我希望能够获得点击矩形的标签,以便能够执行以下操作:
def do(event):
print str(theTagOfTheClickedRectangle)
所以我检查了我可以称之为:
似乎没有一个钉在我点击的矩形。在
我考虑在do
函数中添加更多参数:
w.tag_bind("table" + str(tableNumber), '<Button-1>', do(event, tag))
但这似乎不太管用,但也许我做得不对:
do(event, tag): #this doesn't work at all!!
print event.x
print tag
我希望问题是清楚的,如果我以同样的方式得到标签,就像我可以得到事件的“x”和“y”,那将是非常舒适的。在
我现在能想到的唯一实际解决方案,是计算出'event.x'和'event.y'的数学公式,然后根据点击的坐标计算出用户点击的矩形,这对于我想要做的事情来说似乎过于复杂了,尽管我以前做过,而且显然有效。在
我希望问题是清楚的,其他方面请要求澄清。在
请注意,我没有与这些代码绑定,相反,我正在寻找解决这个问题的方法,即使不使用标记或其他类型的小部件或任何更简单的方法,最有效的方法也能工作。在
应改为
^{pr2}$lambda创建一个函数,将标记名作为第二个参数的默认值。Tkinter只使用一个参数event调用该函数,第二个参数使用默认值。在
您可以使用类似的方法来引用单击的对象:
标记“current”是特殊的,代表鼠标下最上面的对象。在
相关问题 更多 >
编程相关推荐