I have tried using the following code to draw points that create a line in tkinter:
import tkinter as tk
from time import sleep
def myfunction(event):
x
Based on Novel's answer you can further define the function to work when the left mouse button is pressed only, and further, define a function for drawing lines:
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()
First, you have to bind to the "<Motion>"
event, which will fire every time the mouse moves.
Then you need to save the previous mouse coordinates so that you have a place to draw the line from.
Like this:
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()