Я хочу сделать простое приложение для рисования с помощью Tkinter, я хочу рисовать линии с помощью мыши, решение, которое я придумал, отлично работает, и я даже могу рисовать несколько линий, но на рисунке ниже вы можете видеть, что линии выглядят неровными. Мой вопрос: могу ли я рисовать плавные линии на Tkinter?
Вот код, который я использую для рисования линий на холсте:
import tkinter as tk
class DrawingApp:
def __init__(self, master):
self.master = master
self.canvas = tk.Canvas(self.master, width=1024, height=256)
self.canvas.pack()
self.previous_coordinates = None
self.canvas.bind("<B1-Motion>", self.draw)
self.canvas.bind("<Button-3>", self.erase)
self.canvas.bind("<Button-1>", self.draw)
self.canvas.bind("<ButtonRelease-1>", self.reset)
def draw(self, event):
if self.previous_coordinates:
x1, y1 = self.previous_coordinates
x2, y2 = event.x, event.y
self.canvas.create_line(x1, y1, x2, y2, fill = "black", width=20, capstyle=tk.PROJECTING,
joinstyle=tk.BEVEL, smooth=True, splinesteps=36)
self.previous_coordinates = (event.x, event.y)
def erase(self, event):
# delete every drawing in the canvas
self.canvas.delete("all")
def reset(self, event):
self.previous_coordinates = None
root = tk.Tk()
app = DrawingApp(root)
root.mainloop()
Попробуйте изменить параметр capstyle
на tk.ROUND
, и это может немного улучшить плавность.
Также обратите внимание, что варианты smooth
и splinesteps
бесполезны для прямой линии между двумя точками.
self.canvas.create_line(x1, y1, x2, y2, fill = "black", width=20,
capstyle=tk.ROUND, joinstyle=tk.BEVEL)
Результат:
Попробуйте изменить
capstyle
наtk.ROUND
, и это может немного улучшить плавность. Такжеsmooth
иsplinesteps
бесполезны для рисования линии между двумя точками.