编写一个用tkinter库创建的canvas实现手写,画布在左边,展示画布内容的结果展示区在右边,画布的内容能够缩放
时间: 2024-05-12 13:20:41 浏览: 105
以下是一个简单的示例代码:
```
import tkinter as tk
class DrawingApp:
def __init__(self, master):
self.master = master
self.master.title("Drawing App")
# 创建画布和展示区域
self.canvas = tk.Canvas(self.master, width=500, height=500)
self.canvas.pack(side=tk.LEFT, padx=10, pady=10)
self.result_frame = tk.Frame(self.master, width=500, height=500)
self.result_frame.pack(side=tk.RIGHT, padx=10, pady=10)
self.result_canvas = tk.Canvas(self.result_frame, width=500, height=500)
self.result_canvas.pack()
# 绑定画布事件
self.canvas.bind("<B1-Motion>", self.draw)
self.canvas.bind("<ButtonRelease-1>", self.reset)
# 创建缩放控件
self.scale_var = tk.DoubleVar()
self.scale_var.set(1.0)
self.scale = tk.Scale(self.master, from_=0.1, to=2.0, resolution=0.1, orient=tk.HORIZONTAL, length=200, label="缩放", variable=self.scale_var, command=self.update_scale)
self.scale.pack(side=tk.BOTTOM, padx=10, pady=10)
# 创建清空按钮
self.clear_button = tk.Button(self.master, text="清空", command=self.clear)
self.clear_button.pack(side=tk.BOTTOM, padx=10, pady=10)
# 初始化画笔状态
self.pen_color = "black"
self.pen_size = 5
def draw(self, event):
# 绘制画笔轨迹
x, y = event.x, event.y
self.canvas.create_oval(x-self.pen_size, y-self.pen_size, x+self.pen_size, y+self.pen_size, fill=self.pen_color, outline=self.pen_color)
def reset(self, event):
# 重置画笔状态
self.canvas.delete("all")
self.result_canvas.delete("all")
# 获取画布内容
x, y, w, h = self.canvas.bbox("all")
img = self.canvas.postscript(colormode="color")
img = tk.PhotoImage(data=img)
self.canvas.delete("all")
# 在展示区域显示画布内容
self.result_canvas.create_image(0, 0, image=img, anchor=tk.NW)
self.result_canvas.image = img
def update_scale(self, value):
# 更新缩放比例
self.canvas.scale("all", 0, 0, self.scale_var.get(), self.scale_var.get())
def clear(self):
# 清空画布和展示区域
self.canvas.delete("all")
self.result_canvas.delete("all")
if __name__ == "__main__":
root = tk.Tk()
app = DrawingApp(root)
root.mainloop()
```
该应用程序创建了一个包含画布和展示区域的窗口,画布能够接收鼠标事件并绘制画笔轨迹,当鼠标释放时,画布中的内容将被缩放并在展示区域中显示。用户可以使用缩放控件调整展示区域中的画布内容的大小,也可以使用清空按钮清除画布和展示区域中的内容。
阅读全文