10.简单画板 要求:编写一个画板程序,可用鼠标在程序内指定区域作画,画笔颜色可调,带有擦除功能,作画图形可保存为* .bmp格式。( 参考windows附件中的画图c++
时间: 2023-11-30 15:00:25 浏览: 160
编写一个简单的画板程序可以使用Python语言和Python的GUI库Tkinter来实现。首先,需要导入相关模块:
```
from tkinter import *
from tkinter.colorchooser import askcolor
from tkinter.filedialog import asksaveasfilename
from PIL import Image, ImageDraw
```
然后,定义一个画板类,包含以下方法:
1. `__init__`:初始化画板的相关属性,如画布的大小、画笔颜色、是否擦除等。
2. `change_color`:改变画笔颜色,通过调用`askcolor`函数来选择新的颜色。
3. `toggle_erase`:切换擦除/绘画模式。
4. `on_mouse_down`:鼠标按下事件处理方法,记录鼠标的起始位置。
5. `on_mouse_move`:鼠标移动事件处理方法,绘制轨迹。
6. `save_as_bmp`:保存画布内容为bmp格式的图像文件。
具体代码实现如下:
```
class DrawingBoard:
def __init__(self, width=600, height=400):
self.width = width
self.height = height
self.canvas = Canvas(width=self.width, height=self.height, bg='white')
self.canvas.bind("<B1-Motion>", self.on_mouse_move)
self.canvas.bind("<Button-1>", self.on_mouse_down)
self.canvas.pack()
self.drawing_color = 'black'
self.erase_mode = False
self.start_x = None
self.start_y = None
def change_color(self):
color = askcolor(color=self.drawing_color)[1]
if color:
self.drawing_color = color
def toggle_erase(self):
self.erase_mode = not self.erase_mode
def on_mouse_down(self, event):
self.start_x = event.x
self.start_y = event.y
def on_mouse_move(self, event):
if self.start_x and self.start_y:
if self.erase_mode:
self.canvas.create_line(self.start_x, self.start_y, event.x, event.y,
width=10, fill='white')
else:
self.canvas.create_line(self.start_x, self.start_y, event.x, event.y,
width=2, fill=self.drawing_color)
self.start_x = event.x
self.start_y = event.y
def save_as_bmp(self):
file_path = asksaveasfilename(defaultextension=".bmp")
if file_path:
image = Image.new("RGB", (self.width, self.height), "white")
draw = ImageDraw.Draw(image)
for item in self.canvas.find_all():
coords = self.canvas.coords(item)
color = self.canvas.itemcget(item, "fill")
width = self.canvas.itemcget(item, "width")
draw.line(coords, fill=color, width=int(width))
image.save(file_path, "BMP")
```
接下来,可以创建一个画板实例,并使用相关方法来绘制图形、改变画笔颜色、保存图像等操作:
```
board = DrawingBoard()
root = Tk()
root.title("简单画板")
menu_bar = Menu(root)
root.config(menu=menu_bar)
file_menu = Menu(menu_bar)
menu_bar.add_cascade(label="文件", menu=file_menu)
file_menu.add_command(label="保存为BMP", command=board.save_as_bmp)
edit_menu = Menu(menu_bar)
menu_bar.add_cascade(label="编辑", menu=edit_menu)
edit_menu.add_command(label="改变颜色", command=board.change_color)
edit_menu.add_command(label="切换擦除模式", command=board.toggle_erase)
root.mainloop()
```
这样就可以实现一个简单的画板程序,可以用鼠标在程序内指定区域作画,画笔颜色可调,带有擦除功能,并且可以保存作画图形为`.bmp`格式。
阅读全文