目錄
1.認識Python
2.環境與工具
2.1 python環境
2.2 Visual Studio Code編譯
3.制作一個繪圖板
3.1 代碼構思
3.2 代碼實例
3.3 運行結果
4.總結
1.認識Python
Python 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。
Python 的設計具有很強的可讀性,相比其他語言經常使用英文關鍵字或標點符號,它具有比其他語言更有特色的語法結構。
?
2.環境與工具
2.1 python環境
在Windows上使用命令行窗口查看所安裝的python版本
python --version
?
2.2 Visual Studio Code編譯
Visual Studio Code是一款由微軟開發且跨平臺的免費源代碼編輯器。該軟件以擴展的方式支持語法高亮、代碼自動補全、代碼重構功能,并且內置了命令行工具和Git 版本控制系統。
3.制作一個繪圖板
3.1 代碼構思
使用tkinter模塊,利用canvas控件進行繪制,然后使用畫布控件,獲取鼠標按鍵、移動、釋放的操作。
3.2 代碼實例
import tkinter as tk
from tkinter import colorchooser, filedialog, messagebox
from PIL import Image, ImageTk, ImageDraw
import osclass SimplePaint:def __init__(self, root):# 初始化self.root = rootself.root.title("Simple Paint-簡單繪圖板-Zucker")self.root.geometry("800x600")# 創建畫布self.canvas = tk.Canvas(root, bg="white", width=800, height=600)self.canvas.pack(fill=tk.BOTH, expand=True)# 初始化變量self.old_x = Noneself.old_y = Noneself.color = "black"self.eraser_on = False# 設置菜單和綁定事件self.setup_menu()self.setup_bindings()def setup_menu(self):# 設置菜單menu = tk.Menu(self.root)self.root.config(menu=menu)# 文件菜單file_menu = tk.Menu(menu, tearoff=0)menu.add_cascade(label="File", menu=file_menu)file_menu.add_command(label="Open", command=self.open_image)file_menu.add_command(label="Save", command=self.save_image)file_menu.add_separator()file_menu.add_command(label="Exit", command=self.root.quit)# 編輯菜單edit_menu = tk.Menu(menu, tearoff=0)menu.add_cascade(label="Edit", menu=edit_menu)edit_menu.add_command(label="Clear All", command=self.clear_canvas)edit_menu.add_command(label="Erase", command=self.use_eraser)edit_menu.add_command(label="Insert Text", command=self.insert_text)edit_menu.add_command(label="Insert Image", command=self.insert_image)# 形狀菜單shape_menu = tk.Menu(menu, tearoff=0)menu.add_cascade(label="Shapes", menu=shape_menu)shape_menu.add_command(label="Draw Line", command=self.draw_line)shape_menu.add_command(label="Draw Circle", command=self.draw_circle)# 顏色菜單color_menu = tk.Menu(menu, tearoff=0)menu.add_cascade(label="Color", menu=color_menu)color_menu.add_command(label="Choose Color", command=self.choose_color)def setup_bindings(self):# 綁定畫布事件self.canvas.bind("<ButtonPress-1>", self.on_button_press)self.canvas.bind("<B1-Motion>", self.on_paint)self.canvas.bind("<ButtonRelease-1>", self.on_button_release)def choose_color(self):# 選擇顏色self.eraser_on = Falseself.color = colorchooser.askcolor(color=self.color)[1]def clear_canvas(self):# 清除畫布self.canvas.delete("all")def use_eraser(self):# 啟用橡皮擦self.eraser_on = Truedef insert_text(self):# 插入文本self.eraser_on = Falsetext = tk.simpledialog.askstring("Input", "Enter text to insert:")if text:self.canvas.create_text(400, 300, text=text, font=("Arial", 20), fill=self.color)def insert_image(self):# 插入圖片self.eraser_on = Falseimage_path = filedialog.askopenfilename()if image_path:img = Image.open(image_path)img = img.resize((200, 200), Image.ANTIALIAS)self.img = ImageTk.PhotoImage(img)self.canvas.create_image(400, 300, image=self.img, anchor=tk.CENTER)def draw_line(self):# 畫線self.eraser_on = Falseself.draw_shape = "line"def draw_circle(self):# 畫圓self.eraser_on = Falseself.draw_shape = "circle"def open_image(self):# 打開圖片image_path = filedialog.askopenfilename()if image_path:img = Image.open(image_path)self.img = ImageTk.PhotoImage(img)self.canvas.create_image(0, 0, image=self.img, anchor=tk.NW)def save_image(self):# 保存圖片file_path = filedialog.asksaveasfilename(defaultextension=".png", filetypes=[("PNG files", "*.png"), ("All files", "*.*")])if file_path:# 保存畫布內容為 PNG 圖片self.canvas.postscript(file=file_path + '.eps')img = Image.open(file_path + '.eps')img.save(file_path, "png")os.remove(file_path + '.eps')def on_button_press(self, event):# 鼠標按下事件處理self.old_x = event.xself.old_y = event.ydef on_paint(self, event):# 鼠標移動事件處理paint_color = self.color if not self.eraser_on else "white"if self.old_x and self.old_y:self.canvas.create_line(self.old_x, self.old_y, event.x, event.y, fill=paint_color, width=5, capstyle=tk.ROUND, smooth=tk.TRUE)self.old_x = event.xself.old_y = event.ydef on_button_release(self, event):# 鼠標釋放事件處理self.old_x = Noneself.old_y = Noneif __name__ == "__main__":root = tk.Tk()app = SimplePaint(root)root.mainloop()
3.3 運行結果
4.總結
通過定義多個函數來執行命令,并進行可視化操作,你也試試吧!