如何用tkinter在鼠标坐标后面画一条线?

我曾尝试使用下面的代码来绘制,在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()

回答:

基于Novel's answer可以进一步定义功能,当鼠标左键只按下,并进一步工作,定义一个函数用于绘制线

import tkinter as tk 

def draw(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

def draw_line(event):

if str(event.type) == 'ButtonPress':

canvas.old_coords = event.x, event.y

elif str(event.type) == 'ButtonRelease':

x, y = event.x, event.y

x1, y1 = canvas.old_coords

canvas.create_line(x, y, x1, y1)

def reset_coords(event):

canvas.old_coords = None

root = tk.Tk()

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

canvas.pack()

canvas.old_coords = None

root.bind('<ButtonPress-1>', draw_line)

root.bind('<ButtonRelease-1>', draw_line)

#root.bind('<B1-Motion>', draw)

#root.bind('<ButtonRelease-1>', reset_coords)

root.mainloop()

以上是 如何用tkinter在鼠标坐标后面画一条线? 的全部内容, 来源链接: utcz.com/qa/266622.html

回到顶部