1

很简单的一个,这个。例如:

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只会响应对轮廓的点击。

有没有比简单地使用几乎透明的颜色填充更好的方法来解决这个问题?

4

3 回答 3

1

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

于 2013-04-12T20:46:01.170 回答
1

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

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

于 2013-04-12T22:28:33.527 回答
1

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

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

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

不可见(无填充,无轮廓)将触发点击事件,就像另一个圆圈“b”一样。

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

这将产生一个没有填充的单一轮廓圆圈的错觉,并且仍然会触发点击事件。

于 2020-12-03T21:35:05.357 回答