You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:55:16