Tkinter中Canvas绘制鼠标十字线时矩形绑定的Motion事件被阻塞问题
问题原因
你创建的十字线默认堆叠在所有已绘制的矩形上层,十字线作为Canvas的有效元素会捕获鼠标<Motion>事件,导致下方的矩形无法接收事件触发。
解决方法
创建十字线时将其设置为禁用状态,禁用状态的Canvas元素不会响应任何鼠标事件,不会遮挡下层元素的事件触发,只需在create_line方法中添加state=DISABLED参数即可。
也可以选择在创建十字线时指定below参数,让十字线绘制到所有矩形的下层,同样可以解决事件遮挡问题。
核心修改代码
def canvmove(event): # print("canvas motion ", event.x, event.y) dashes = [5, 25] canvas.delete('mousepos') # 添加state=DISABLED参数,让十字线不捕获鼠标事件 canvas.create_line(event.x, 0, event.x, 1000, dash=dashes, tags='mousepos', state=DISABLED) canvas.create_line(0, event.y, 1000, event.y, dash=dashes, tags='mousepos', state=DISABLED)
内容的提问来源于stack exchange,提问作者Julien Merlin
相关产品推荐
相关产品推荐

