绘图程序结构简单,逻辑也不复杂,例如在工具栏 (tool_frame) 中选择画线 (draw_line), 在选项栏(top_frame) 设置,然后在画布 (canvas_frame) 中进行绘制即可。其他如画方画园等,无论是操作还是实现,都基本类同。
1. 效果图:
2. 代码:
import os import sys import tkinter as tk from tkinter import colorchooser, messagebox, filedialog # 为引用 utils,在 site-packages 目录下新建 mypath.pth 文件, # 添加所需导入模块的目录路径, 如 ‘x01.lab/py/’ 所在路径。 import utils from paint.core import CanvasFrame, R, ToolFrame, TopFrame sys.path.append(utils.R.CurrentDir) class MainWindow(tk.Tk): def __init__(self): super().__init__() self.title('x01.paint') utils.R.win_center(self) self.menu = tk.Menu(self) utils.R.generate_menus(self,['file', 'edit', 'help'], sepindies=(2, 4)) self.configure(menu=self.menu) self.top_frame = TopFrame(self) self.top_frame.configure(height=25) self.top_frame.pack(side='top', fill='x', pady=2) self.tool_frame = ToolFrame(self) self.tool_frame.configure(width=80, relief='raised') self.tool_frame.pack(side='left', fill='y', pady=3) self.canvas_frame = CanvasFrame(self) self.canvas_frame.pack(side='right', fill='both', expand='yes') self.tool_frame.tool_click(0) def file_1_new(self): self.canvas_frame.canvas.delete(tk.ALL) self.canvas_frame.canvas.config(bg='white') def file_2_save(self): filename = filedialog.asksaveasfilename(master=self, title='Save', filetypes=[('postscript file', '*.ps'), ('All Files', '*.*')]) if not filename: return self.canvas_frame.canvas.postscript(file=filename, colormode='color') messagebox.showinfo(title=self.title, message=filename + ' Save success!') def file_3_quit(self): self.destroy() def edit_1_undo(self): items = list(self.canvas_frame.canvas.find('all')) try: last_item = items.pop() except IndexError: return self.canvas_frame.canvas.delete(last_item) def edit_2_zoom_in(self): self.canvas_frame.canvas.scale('all', 0,0,1.2,1.2) self.canvas_frame.canvas.config(scrollregion=self.canvas_frame.canvas.bbox(tk.ALL)) def edit_3_zoom_out(self): self.canvas_frame.canvas.scale('all', 0,0,0.8,0.8) self.canvas_frame.canvas.config(scrollregion=self.canvas_frame.canvas.bbox(tk.ALL)) def help_1_about(self): messagebox.showinfo('x01.paint', '绘图程序,版权属于x01(黄雄)所有。') if __name__ == "__main__": win = MainWindow() win.mainloop()