python - 如何在绘制线条时调用已绑定到 tkinter 画布上的图像的事件处理程序?
问题描述
我的应用在画布上有 2 张图像。我想用一条线连接这两个图像。要求是在第一个图像上右键单击有一个上下文菜单。上下文菜单有一个名为“开始连接”的选项。单击该选项时,从image1开始画一条线到鼠标指针的当前位置,然后当鼠标单击image2时,连接将在image2处结束。我能够使上下文菜单绑定到右键单击,并且该行跟随当前鼠标指针。但现在的问题是,当我单击 image2 时,即使我已将其绑定到事件,单击事件处理程序也不会被触发。
instanceobj 是某个其他类的对象,并且与当前图像相关联。
if_connection_started = False
start_x = 0
start_y = 0
end_x = 0
end_y = 0
start_instance = None
start_instance_imgid = None
prev_line = None
end_img_id = None
@staticmethod
def start_connection(systemcanvas, instanceobj, img_id):
ClassName.if_connection_started = True
ClassName.start_x = instanceobj.coord[0]
ClassName.start_y = instanceobj.coord[1]
ClassName.start_instance = instanceobj
ClassName.start_instance_imgid = img_id
systemcanvas.bind('<Motion>', lambda event, s = systemcanvas:
ClassName.motion(s, event))
@staticmethod
def motion(systemcanvas, event):
if ClassName.if_connection_started:
ClassName.user_drawn = True
x, y = event.x, event.y
if ClassName.prev_line:
systemcanvas.delete(ClassName.prev_line)
l = systemcanvas.create_line(ClassName.start_x,
ClassName.start_y,
x, y, width = 5)
ClassName.prev_line = l
ClassName.end_img_id = systemcanvas.find_overlapping(event.x,
event.y, event.x, event.y)
for id in ClassName.end_img_id:
if systemcanvas.type(id) == 'image':
systemcanvas.coords(l,x,y,event.x, event.y)
@staticmethod
def end_connection(systemcanvas, instanceobj, dash):
systemcanvas.delete(ClassName.prev_line)
ClassName.prev_line = None
ClassName.if_connection_started = False
ClassName.end_x = instanceobj.coord[0]
ClassName.end_y = instanceobj.coord[1]
ClassName.start_instance_imgid = None
if ClassName.start_instance != instanceobj:
Line(ClassName.start_instance, instanceobj, systemcanvas)
Line 是另一个从开始图像到结束图像绘制线条的类。单击图像时,会调用一个名为 select_image() 的方法,该方法又会调用函数 end_connection()。
解决方案
推荐阅读
- matlab - 使用 MATLAB 从 Openweathermap.org 抓取数据
- regex - 清除除匹配项之外的所有内容
- python - 是否可以覆盖整个 Python 包的内置 Python?
- angular - 标题组件在刷新时丢失状态
- php - Android Retrofit 上传带文字的图片到PHP服务器
- sql - 如何在 SQL Server 中将“XX 天 XX 小时 XX 分钟”转换为秒?
- java - 使用java流按相同类型的2个键分组
- python - 仅当前面有特定模式时才匹配单词
- spring - 自定义对象作为 @RequestParam
- html - 分页和 django 过滤器