如何用tkinter在鼠标坐标后绘制一条线?


问题内容

我尝试使用以下代码绘制在tkinter中创建线的点:

import tkinter as tk
from time import sleep

def myfunction(event):
    x, y = event.x, event.y
    x1 = (x+1)
    y1 = (y+1)
    canvas.create_line(x, y, x1, y1)
    sleep(0.5)



root = tk.Tk()

canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()

root.bind('d', myfunction)


root.mainloop()

可以理解,该程序仅在按“ d”键时会画点。我试过在myfunction函数中使用循环,如下所示:

def myfunction(event):
    x, y = event.x, event.y
    x1 = (x+1)
    y1 = (y+1)
    for x in range(0,5):
        canvas.create_line(x, y, x1, y1)
        sleep(0.1)

但这不起作用。我尝试了许多其他解决方案,但似乎都没有用。

有解决这个问题的方法吗?


问题答案:

首先,您必须绑定到"<Motion>"事件,该事件将在每次鼠标移动时触发。

然后,您需要保存以前的鼠标坐标,以便可以从中绘制线条。

像这样:

import tkinter as tk

def myfunction(event):
    x, y = event.x, event.y
    if canvas.old_coords:
        x1, y1 = canvas.old_coords
        canvas.create_line(x, y, x1, y1)
    canvas.old_coords = x, y

root = tk.Tk()

canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()
canvas.old_coords = None

root.bind('<Motion>', myfunction)
root.mainloop()