概述

虽然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 = Trueif 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 = Falseself.x = event.xself.y = event.ydef stopDraw(self, event):self.start_flag = Trueself.lastdraw = 0def 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.xself.y = event.ydef 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.xself.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.charif c == 'r':self.fgcolor = 'red'elif c == 'g':self.fgcolor = 'green'elif c == 'b':self.fgcolor = 'blue'elif c == 'y':self.fgcolor = 'yellow'

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

源码链接

备注

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

Python实现画图软件功能相关推荐

  1. python画简单的图形的代码-Python实现画图软件功能方法详解

    概述 虽然Python的强项在人工智能,数据处理方面,但是对于日常简单的应用,Python也提供了非常友好的支持(如:Tkinter),本文主要一个简单的画图小软件,简述Python在GUI(图形用户 ...

  2. python画图代码大全-Python实现画图软件功能方法详解

    概述 虽然Python的强项在人工智能,数据处理方面,但是对于日常简单的应用,Python也提供了非常友好的支持(如:Tkinter),本文主要一个简单的画图小软件,简述Python在GUI(图形用户 ...

  3. python画图软件是哪个_Python实现画图软件功能方法详解

    Python实现画图软件功能方法详解,按钮,事件,绑定,快捷键,直线 Python实现画图软件功能方法详解 易采站长站,站长之家为您整理了Python实现画图软件功能方法详解的相关内容. 概述 虽然P ...

  4. 如何使用Python制作画图软件(1)

    哈啰,大家好,我是新人创作者:QWQ_chinese . 今天我们来谈一谈,如何在Python中用纯pygame模块制作一个简简单单的画图软件~ 大家看完这篇文章,觉得对自己有好处的,可以点个赞,顺便 ...

  5. Python简易画图软件开发

    可以简单实现清屏.橡皮檫.矩形.直线.箭头.画笔以及颜色的选择 """开发画图软件""" from tkinter import * fro ...

  6. python操作画图软件_Python绘图工具matplotlib的使用(图形并茂)

    matplotlib官网文档: 支持win7_64_bit的matplotlib库下载网址: 简单介绍: matplotlib 是python最著名的画图库,它提供了一整套和matlab类似的命令AP ...

  7. python画最简单的折线图,推荐origin画图软件

    1.因实际需要,需要画一些简单的折线图,详细代码见下: import matplotlib.pyplot as plt import numpy as nplist1=[1,2,3,4,5,6,7,8 ...

  8. 开源项目推荐:OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/MyPaint/GIMP/Krita/Pencil2D/inkspace/enve等绘图库或画图软件

    绘图引擎简介 Windows环境下二维绘图引擎有多种选择:GDI.GDI+.DirectDraw.Qt/QPainter.Agg.Cairo.skia.Direct2D.Direct3D.OpenGL ...

  9. 初学者编写python用什么软件好_初学者编写python用什么软件

    初学者编写python用什么软件 以下是常用的几款Python代码编辑器和Python集成开发工具. 一.Python代码编辑器 1. Sublime Text Sublime Text是一款非常流行 ...

最新文章

  1. 用表格布局2个链接6个图片
  2. 用Socket 打造跨语言跨操作系统的网络MORPG游戏(二)
  3. OpenCV---ROI(region of interest)和泛洪填充
  4. AutoMapper学习笔记
  5. 计算机系统中字word的描述性定义是,计算机基础练习题1
  6. 51单片机8路抢答器c语言,51单片机8路抢答器
  7. 自然语言处理——分词系统(正向最大匹配法)
  8. GHD官宣全新中国区焕发大使乔欣
  9. c r 语言教程,R语言初级教程
  10. 一起来云赏月把!three.js实现vr赏月!
  11. 【天光学术】汉语言文学论文:浅谈农村初中文言文教学现状及有效策略
  12. 思科关闭日志_关于思科交换机的日志配置总结
  13. GEE学习:按照行列号筛选鄱阳湖湖区影像数据并查询相关信息
  14. uni-app实战之社区交友APP(10)登录、个人空间开发和动画优化
  15. 智能手环方案开源(含源码,原理图,APP,通信协议等) ...
  16. 项目进度表:可应用于各行业中的项目进度管控
  17. “速课小龙”项目冲刺2
  18. 还在埋头干活?给程序员的几个忠告
  19. 电子邮箱app有哪些,微信打开邮箱app如何使用,邮件app下载
  20. python爬虫高级教程,JS逆向之百度翻译

热门文章

  1. 什么是Hadoop的HA机制?
  2. 《高级职称证书挂靠价格一览表》
  3. 快捷指令获取url内容_快捷指令入门4—一键打开支付宝扫一扫
  4. 微信小程序云开发项目-个人待办事项-02今日模块开发
  5. vxe-table 实现复杂的表格功能。
  6. jquery点击图片进行放大缩小
  7. 刘鹏教授接受新华日报财经客户端采访:智能制造应用落地生根,“江苏智造”进入快速增长期...
  8. 【性能测试】性能测试测试指标
  9. 【计算机组成原理】第一章 概论
  10. 基于canvas的图片剪裁工具