点击时如何获取形状的标签

2024-04-20 05:05:47 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我在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)

所以这只是在行和列的布局中创建矩形。在

每个矩形都有一个特定的标记,格式为table1table2到{}。在

当我单击矩形时,do函数将执行。在

比如说do是这样的:

^{pr2}$

不是的,我在控制台中的每一次点击都会得到一个“点击”。在

我希望能够获得点击矩形的标签,以便能够执行以下操作:

def do(event):
    print str(theTagOfTheClickedRectangle)

所以我检查了我可以称之为:

  • 小工具
  • x、 是的
  • 根,根
  • 字符
  • 键音
  • 密钥码
  • 数字
  • 宽度、高度
  • 类型

似乎没有一个钉在我点击的矩形。在

我考虑在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'的数学公式,然后根据点击的坐标计算出用户点击的矩形,这对于我想要做的事情来说似乎过于复杂了,尽管我以前做过,而且显然有效。在

我希望问题是清楚的,其他方面请要求澄清。在

请注意,我没有与这些代码绑定,相反,我正在寻找解决这个问题的方法,即使不使用标记或其他类型的小部件或任何更简单的方法,最有效的方法也能工作。在


Tags: 方法用户eventtag画布table布局解决方案
2条回答
w.tag_bind("table" + str(tableNumber), '<Button-1>', do(event, tag))

应改为

^{pr2}$

lambda创建一个函数,将标记名作为第二个参数的默认值。Tkinter只使用一个参数event调用该函数,第二个参数使用默认值。在

您可以使用类似的方法来引用单击的对象:

event.widget.find_withtag("current")

标记“current”是特殊的,代表鼠标下最上面的对象。在

相关问题 更多 >