如何在Tkinter Canvas上同时绘制两条追踪光标坐标的滑动线?
解决Tkinter Canvas双滑动追踪线问题
你遇到的问题根源很直接:你只创建了一条Canvas线条,两个绘制函数都在修改这条线的坐标。draw_y_marker先修改了线条的坐标,紧接着draw_x_marker又把它改成了x方向的线,所以最后只显示x方向的效果。
要实现同时显示两条线,你需要创建两条独立的Canvas线条对象,分别对应x和y方向的追踪线,然后在各自的函数里修改对应线条的坐标。
修正后的完整代码
import tkinter as tk def callback(event): draw_y_marker(event.y) draw_x_marker(event.x) def draw_x_marker(x): # 修改x方向追踪线的坐标:垂直穿过x点,从顶部到底部 paint.coords(x_line, x, 0, x, paint.winfo_height()) def draw_y_marker(y): # 修改y方向追踪线的坐标:水平穿过y点,从左到右 paint.coords(y_line, 0, y, paint.winfo_width(), y) root = tk.Tk() paint = tk.Canvas(root, width=400, height=300) # 给画布设置初始宽高 paint.bind('<Motion>', callback) paint.pack() # 创建两条独立的追踪线,初始位置设为画布边缘 x_line = paint.create_line(0, 0, 0, paint.winfo_height(), dash=(2,2)) # 虚线样式可选 y_line = paint.create_line(0, 0, paint.winfo_width(), 0, dash=(2,2)) root.mainloop()
关键修改点
- 新增
x_line和y_line两个独立的Canvas线条对象,避免互相覆盖 - 修复原代码里的语法错误:
Tk()要写成tk.Tk(),原代码里的x和height都是未定义的变量 - 让追踪线覆盖整个画布范围(而非仅到20),视觉效果更完整
- 可选添加虚线样式,方便区分追踪线和画布内容
内容的提问来源于stack exchange,提问作者Kranka33
相关产品推荐
相关产品推荐

