Вы можете использовать непрерывное рисование вместо рисования отдельных маленьких кружков.
В следующем примере хранятся последние значения положения мыши, чтобы нарисовать линию к текущему значению.
Вам нужно нажать и переместить мышь, чтобы нарисовать; отпустите кнопку, чтобы остановить.
Имя изображения содержит число, которое увеличивается на 1 при каждом сохранении; поэтому вы можете сохранить все промежуточные изображения при рисовании полной картинки.
from tkinter import *
import PIL
from PIL import Image, ImageDraw
def save():
global image_number
filename = f'image_{image_number}.png' # image_number increments by 1 at every save
image1.save(filename)
image_number += 1
def activate_paint(e):
global lastx, lasty
cv.bind('<B1-Motion>', paint)
lastx, lasty = e.x, e.y
def paint(e):
global lastx, lasty
x, y = e.x, e.y
cv.create_line((lastx, lasty, x, y), width=1)
# --- PIL
draw.line((lastx, lasty, x, y), fill='black', width=1)
lastx, lasty = x, y
root = Tk()
lastx, lasty = None, None
image_number = 0
cv = Canvas(root, width=640, height=480, bg='white')
# --- PIL
image1 = PIL.Image.new('RGB', (640, 480), 'white')
draw = ImageDraw.Draw(image1)
cv.bind('<1>', activate_paint)
cv.pack(expand=YES, fill=BOTH)
btn_save = Button(text="save", command=save)
btn_save.pack()
root.mainloop()
Якобы не менее страшен, чем ваш, но линии непрерывны ...
![enter image description here](https://i.stack.imgur.com/cBIGh.png)