绘图程序结构简单,逻辑也不复杂,例如在工具栏 (tool_frame) 中选择画线 (draw_line), 在选项栏(top_frame) 设置,然后在画布 (canvas_frame) 中进行绘制即可。其他如画方画园等,无论是操作还是实现,都基本类同。

1. 效果图:

            x01.paint: 绘图程序

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()
main.py

相关文章:

  • 2022-02-04
  • 2023-04-04
  • 2021-05-16
  • 2021-07-05
  • 2021-06-21
  • 2021-10-23
  • 2021-11-24
猜你喜欢
  • 2021-11-15
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-05
  • 2021-05-08
  • 2021-10-06
相关资源
相似解决方案