Tru*_*ufa 3 python events user-interface tkinter click
假设我在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)
Run Code Online (Sandbox Code Playgroud)
所以这只是在行和列布局中创建矩形.
每个矩形都有一个特定的标签,形式为table1,table2to table30.
当我单击矩形时,该do函数执行.
让我们说do就像这样:
def do(event):
print "click"
Run Code Online (Sandbox Code Playgroud)
对于矩形中的每次单击,我都不会在控制台中获得"单击".
我希望能够获得点击矩形的标签,以便能够执行以下操作:
def do(event):
print str(theTagOfTheClickedRectangle)
Run Code Online (Sandbox Code Playgroud)
所以我查看了我可以调用哪些事件:
似乎没有人指出我点击了什么矩形.
我想在do这里为函数添加更多参数:
w.tag_bind("table" + str(tableNumber), '<Button-1>', do(event, tag))
Run Code Online (Sandbox Code Playgroud)
但这似乎没有用,但也许我做得do不对:
do(event, tag): #this doesn't work at all!!
print event.x
print tag
Run Code Online (Sandbox Code Playgroud)
我希望这个问题很明确,如果我得到标签的方式与我能得到事件的'x'和'y'相同,那将非常舒服.
我现在能想到的唯一实际解决方案是计算'event.x'和'event.y'的数学,并根据点击的坐标计算用户点击的矩形,这似乎过于复杂我正在尝试做什么,虽然我之前已经做过,但它显然有效.
我希望问题很明确,其他明智的请求任何澄清.
请注意,我不依赖于任何此代码,而是,我正在寻找这个问题的解决方案,即使没有使用标签,或其他类型的小部件或其他更容易的方法,最有效的将工作.
你可以使用这样的东西来引用被点击的对象:
event.widget.find_withtag("current")
Run Code Online (Sandbox Code Playgroud)
标签"current"是特殊的,代表鼠标下方最顶层的对象.