tkinter:透明形状的点击不会注册

时间:2013-04-12 20:25:10

标签: python tkinter

相当简单,这个。例如:

a = canvas.create_circle(0,0,50,50,outline='red',width=3,fill='')
b = canvas.create_circle(0,0,50,50,outline='red',width=3,fill='red')

b会响应圈子中任意位置的点击事件,而a只会响应大纲上的点击次数。

有没有更好的方法来解决这个问题,而不仅仅是使用几乎透明的颜色来填充?

3 个答案:

答案 0 :(得分:1)

答案在某种程度上取决于你如何定义“更好”。如果对象没有填充颜色,则点击不会注册。一种选择是将click事件放在画布上,然后使用画布find_closestfind_overlapping方法查找离光标最近的对象。

答案 1 :(得分:0)

您可以使用多边形而不是椭圆形:

a = canvas.create_polygon(100,100,50,150,100,200,150,150, outline='red', fill='', smooth=1)

编辑:

多边形对鼠标点击很敏感,即使它没有填充颜色(或相关的轮廓)。

请参阅画布文档:http://www.tcl.tk/man/tcl/TkCmd/canvas.htm

答案 2 :(得分:0)

有点晚了,但这是解决问题的方法。在您的情况下,您会注意到,如果单击无填充对象本身的轮廓,则会触发click事件。 (不知道为什么,但是它的行为方式如此)

现在,如果您同时删除轮廓并填充,即

a = canvas.create_circle(0,0,50,50,outline='',fill='')

不可见(无填充,无轮廓)会像其他圆圈“ b”一样触发点击事件。

因此,您可以做的是创建一个不可见的圆(不填充,不轮廓),将其绑定到触发事件。 然后使用所需的轮廓参数在其顶部(相同的坐标)创建另一个圆。

这将给出一个没有填充的单个轮廓圆的错觉,并且仍会触发click事件。