相当简单,这个。例如:
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
只会响应大纲上的点击次数。
有没有更好的方法来解决这个问题,而不仅仅是使用几乎透明的颜色来填充?
答案 0 :(得分:1)
答案在某种程度上取决于你如何定义“更好”。如果对象没有填充颜色,则点击不会注册。一种选择是将click事件放在画布上,然后使用画布find_closest
或find_overlapping
方法查找离光标最近的对象。
答案 1 :(得分:0)
您可以使用多边形而不是椭圆形:
a = canvas.create_polygon(100,100,50,150,100,200,150,150, outline='red', fill='', smooth=1)
编辑:
多边形对鼠标点击很敏感,即使它没有填充颜色(或相关的轮廓)。
答案 2 :(得分:0)
有点晚了,但这是解决问题的方法。在您的情况下,您会注意到,如果单击无填充对象本身的轮廓,则会触发click事件。 (不知道为什么,但是它的行为方式如此)
现在,如果您同时删除轮廓并填充,即
a = canvas.create_circle(0,0,50,50,outline='',fill='')
不可见(无填充,无轮廓)会像其他圆圈“ b”一样触发点击事件。
因此,您可以做的是创建一个不可见的圆(不填充,不轮廓),将其绑定到触发事件。 然后使用所需的轮廓参数在其顶部(相同的坐标)创建另一个圆。
这将给出一个没有填充的单个轮廓圆的错觉,并且仍会触发click事件。