Python实现画图软件功能

简介: Python实现画图软件功能

概述

虽然Python的强项在人工智能,数据处理方面,但是对于日常简单的应用,Python也提供了非常友好的支持(如:Tkinter),本文主要一个简单的画图小软件,简述Python在GUI(图形用户界面)方面的应用,仅供学习分享使用,如有不足之处,还请指正。

设计思路

  • 页面布局:主要分为上下两部分 a. 绘图区域,本例以Canvas实现 b. 下部:功能区,由按钮实现
  • 事件监听:通过给功能按钮绑定事件,来实现不同的功能,如:绘线,绘矩形等功能。
  • 绘图区域:监听鼠标左键的按下(开始绘图)和抬起(停止绘图),再根据不同的按钮实现绘制不同的图形。

涉及知识点

  • 开发工具:Python3.7 , PyCharm2019
  • Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
  • Canvas控件提供了一个自定义的绘图区域,可以通过不同的函数来绘制不同的图形。
  • 绘制直线 create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor)
  • 绘制带箭头的直线 create_line(self.x, self.y, event.x, event.y, arrow=LAST, fill=self.fgcolor)
  • 绘制矩形 create_rectangle(self.x, self.y, event.x, event.y, outline=self.fgcolor)
  • 绘制曲线,是通过绘制不同的点来实现的
  • 清除图形 drawpad.delete('all')
  • Button 按钮控件,通过绑定(bind)不同的监听事件来实现不同的功能。
  • name属性设置按钮的名称,
  • text属性设置按钮的显示文本。
  • bind 绑定事件

示例效果图

本例主要实现绘制直线,带箭头的直线,曲线,矩形,清除等功能,如下所示:

核心代码

在本例中,主要功能如下:

创建画板

"""创建画图区域"""
self.drawpad = Canvas(self, width=win_width, height=win_height, bg=bgcolor)
self.drawpad.pack()

创建按钮

# 创建按钮
self.btn_start = Button(self, name='start', text='开始')
self.btn_start.pack(side='left', padx=10)
self.btn_pen = Button(self, name='pen', text='画笔')
self.btn_pen.pack(side='left', padx=10)
self.btn_rect = Button(self, name='rect', text='矩形')
self.btn_rect.pack(side='left', padx=10)
self.btn_clear = Button(self, name='clear', text='清屏')
self.btn_clear.pack(side='left', padx=10)
self.btn_erasor = Button(self, name='erasor', text='橡皮擦')
self.btn_erasor.pack(side='left', padx=10)
self.btn_line = Button(self, name='line', text='直线')
self.btn_line.pack(side='left', padx=10)
self.btn_line_arrow = Button(self, name='line_arrow', text='箭头直线')
self.btn_line_arrow.pack(side='left', padx=10)
self.btn_color = Button(self, name='color', text='颜色')
self.btn_color.pack(side='left', padx=10)

绑定事件

# 绑定事件
self.btn_line.bind('<Button-1>', self.eventManager)  # 点击按钮事件
self.btn_line_arrow.bind('<Button-1>', self.eventManager)  # 点击按钮事件
self.btn_rect.bind('<Button-1>', self.eventManager)  # 点击按钮事件
self.btn_pen.bind('<Button-1>', self.eventManager)  # 点击按钮事件
self.btn_erasor.bind('<Button-1>', self.eventManager)  # 点击按钮事件
self.btn_clear.bind('<Button-1>', self.eventManager)  # 点击按钮事件
self.btn_color.bind('<Button-1>', self.eventManager)  # 点击按钮事件

功能实现

def eventManager(self, event):
        name = event.widget.winfo_name()
        print(name)
        self.start_flag = True
        if name == 'line':
            # 左键拖动
            self.drawpad.bind('<B1-Motion>', self.myline)
        elif name == 'line_arrow':
            self.drawpad.bind('<B1-Motion>', self.myline_arrow)
        elif name == 'rect':
            self.drawpad.bind('<B1-Motion>', self.myrect)
        elif name == 'pen':
            self.drawpad.bind('<B1-Motion>', self.mypen)
        elif name == 'erasor':
            self.drawpad.bind('<B1-Motion>', self.myerasor)
        elif name == 'clear':
            self.drawpad.delete('all')
        elif name == 'color':
            c = askcolor(color=self.fgcolor, title='请选择颜色')
            print(c)  # c的值 ((128.5, 255.99609375, 0.0), '#80ff00')
            self.fgcolor = c[1]
    def startDraw(self, event):
        self.drawpad.delete(self.lastdraw)
        if self.start_flag:
            self.start_flag = False
            self.x = event.x
            self.y = event.y
    def stopDraw(self, event):
        self.start_flag = True
        self.lastdraw = 0
    def myline(self, event):
        self.startDraw(event)
        self.lastdraw = self.drawpad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor)
    def myline_arrow(self, event):
        self.startDraw(event)
        self.lastdraw = self.drawpad.create_line(self.x, self.y, event.x, event.y, arrow=LAST, fill=self.fgcolor)
    def myrect(self, event):
        self.startDraw(event)
        self.lastdraw = self.drawpad.create_rectangle(self.x, self.y, event.x, event.y, outline=self.fgcolor)
    def mypen(self, event):
        self.startDraw(event)
        print('self.x=', self.x, ',self.y=', self.y)
        self.drawpad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor)
        self.x = event.x
        self.y = event.y
    def myerasor(self, event):
        self.startDraw(event)
        print('self.x=', self.x, ',self.y=', self.y)
        self.drawpad.create_rectangle(event.x - 3, event.y - 3, event.x + 3, event.y + 3, fill=bgcolor)
        self.x = event.x
        self.y = event.y

快捷键的实现

self.master.bind('<KeyPress-r>', self.hotKey)  # 绑定快捷键
self.master.bind('<KeyPress-g>', self.hotKey)  # 绑定快捷键
self.master.bind('<KeyPress-b>', self.hotKey)  # 绑定快捷键
self.master.bind('<KeyPress-y>', self.hotKey)  # 绑定快捷键
self.drawpad.bind('<ButtonRelease-1>', self.stopDraw)  # 左键释放按钮

快捷键功能实现

def hotKey(self, event):
        c = event.char
        if c == 'r':
            self.fgcolor = 'red'
        elif c == 'g':
            self.fgcolor = 'green'
        elif c == 'b':
            self.fgcolor = 'blue'
        elif c == 'y':
            self.fgcolor = 'yellow'

有需要的朋友,可点击链接下载整体代码,如下所示:

源码链接

备注

不积跬步,无以至千里;不积小流,无以成江海;锲而舍之,朽木不折,锲而不舍,金石可镂。

相关文章
|
2月前
|
JSON 监控 BI
拼多多批量下单工具,拼多多买家批量下单软件,低价下单python框架分享
使用Selenium实现自动化操作流程多线程订单处理提升效率
|
2月前
|
机器人 数据安全/隐私保护 Python
企业微信自动回复软件,企业微信自动回复机器人,python框架分享
企业微信机器人包含完整的消息处理流程,支持文本消息自动回复、事件处理、消息加密解密等功能
|
2月前
|
数据安全/隐私保护 Python
微信群成员导出工具, 微信群成员导出软件, 微信群管理工具软件【python】
这个工具提供了完整的微信群成员导出功能,包括登录微信、获取群列表、导出成员信息到Excel等功能
|
2月前
|
数据安全/隐私保护 计算机视觉 iOS开发
拼多多订单截图生成器,拼多多订单p图软件,python版本
这段代码实现了一个完整的拼多多订单截图生成器,包含了订单数据生成、图像处理和二维码生成等功能
|
2月前
|
人工智能 数据安全/隐私保护 Python
小红书图文生成器,小红书AI图文生成工具,python版本软件
Pillow库自动生成符合平台尺寸要求的配图7;3)利用Playwright实现自动化发布流程6。
|
2月前
|
JSON 数据安全/隐私保护 数据格式
拼多多批量下单软件,拼多多无限账号下单软件,python框架仅供学习参考
完整的拼多多自动化下单框架,包含登录、搜索商品、获取商品列表、下单等功能。
|
2月前
|
API 数据安全/隐私保护 开发者
企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
|
2月前
|
存储 API 数据库
自动发短信的软件,批量自动群发短信,手机号电话号生成器【python框架】
这个短信群发系统包含以下核心功能: 随机手机号生成器(支持中国号码) 批量短信发送功能(使用Twilio API)
|
2月前
|
API 数据安全/隐私保护 Python
批量发短信的软件,自动群发短信批量工具,手机号电话生成脚本插件【python】
该工具包含三个核心模块:短信发送核心功能、配置管理系统和命令行界面。使用时需先配置API密钥和短信模板
|
1月前
|
API 数据安全/隐私保护 Python
拼多多批量上架软件, 电商一键上货发布工具,python电商框架分享
多线程批量上传架构,支持并发处理商品数据 完整的拼多多API签名和token管理机制

热门文章

最新文章

推荐镜像

更多