请用tkinter实现一个跨平台能左键绘画 右键擦除 中键清屏 而且还能调颜色 调粗细 更改画布大小 有帮助说明的 能丝滑绘画的程序
以下是使用tkinter实现的一个简单的绘画程序,满足了你的要求:
import tkinter as tk
class DrawingApp:
def __init__(self, root):
self.root = root
self.root.title("绘画程序")
self.canvas_width = 800
self.canvas_height = 600
self.color = "black"
self.line_width = 1
self.create_widgets()
def create_widgets(self):
self.canvas = tk.Canvas(self.root, width=self.canvas_width, height=self.canvas_height)
self.canvas.pack()
self.canvas.bind("<ButtonPress-1>", self.start_drawing)
self.canvas.bind("<B1-Motion>", self.draw)
self.canvas.bind("<ButtonPress-3>", self.start_erasing)
self.canvas.bind("<B3-Motion>", self.erase)
self.canvas.bind("<ButtonPress-2>", self.clear_canvas)
self.color_button = tk.Button(self.root, text="选择颜色", command=self.select_color)
self.color_button.pack(side=tk.LEFT, padx=10)
self.width_scale = tk.Scale(self.root, from_=1, to=10, orient=tk.HORIZONTAL, label="线条粗细", command=self.set_line_width)
self.width_scale.pack(side=tk.LEFT, padx=10)
self.size_button = tk.Button(self.root, text="更改画布大小", command=self.change_canvas_size)
self.size_button.pack(side=tk.LEFT, padx=10)
def start_drawing(self, event):
self.last_x = event.x
self.last_y = event.y
def draw(self, event):
self.canvas.create_line(self.last_x, self.last_y, event.x, event.y, fill=self.color, width=self.line_width)
self.last_x = event.x
self.last_y = event.y
def start_erasing(self, event):
self.last_x = event.x
self.last_y = event.y
def erase(self, event):
self.canvas.create_rectangle(event.x-5, event.y-5, event.x+5, event.y+5, fill="white", outline="white")
self.last_x = event.x
self.last_y = event.y
def clear_canvas(self, event):
self.canvas.delete("all")
def select_color(self):
self.color = tk.colorchooser.askcolor()[1]
def set_line_width(self, value):
self.line_width = int(value)
def change_canvas_size(self):
new_width = tk.simpledialog.askinteger("更改画布大小", "请输入新的宽度:", parent=self.root, minvalue=100, maxvalue=2000)
new_height = tk.simpledialog.askinteger("更改画布大小", "请输入新的高度:", parent=self.root, minvalue=100, maxvalue=2000)
if new_width and new_height:
self.canvas.config(width=new_width, height=new_height)
self.canvas_width = new_width
self.canvas_height = new_height
root = tk.Tk()
app = DrawingApp(root)
root.mainloop()
这个绘画程序使用了tkinter库创建一个窗口,然后在窗口中添加了一个画布(canvas)。左键按下并移动鼠标可以绘制线条,右键按下并移动鼠标可以擦除,中键按下可以清空画布。按钮可以选择颜色、调整线条粗细,以及更改画布大小。
注意,这个程序可能在绘制大量线条时会有些卡顿,如果需要更加丝滑的绘画体验,可以考虑使用其他库,比如Pygame
原文地址: https://www.cveoy.top/t/topic/iMCo 著作权归作者所有。请勿转载和采集!