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 = 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实现画图软件功能相关推荐
- python画简单的图形的代码-Python实现画图软件功能方法详解
概述 虽然Python的强项在人工智能,数据处理方面,但是对于日常简单的应用,Python也提供了非常友好的支持(如:Tkinter),本文主要一个简单的画图小软件,简述Python在GUI(图形用户 ...
- python画图代码大全-Python实现画图软件功能方法详解
概述 虽然Python的强项在人工智能,数据处理方面,但是对于日常简单的应用,Python也提供了非常友好的支持(如:Tkinter),本文主要一个简单的画图小软件,简述Python在GUI(图形用户 ...
- python画图软件是哪个_Python实现画图软件功能方法详解
Python实现画图软件功能方法详解,按钮,事件,绑定,快捷键,直线 Python实现画图软件功能方法详解 易采站长站,站长之家为您整理了Python实现画图软件功能方法详解的相关内容. 概述 虽然P ...
- 如何使用Python制作画图软件(1)
哈啰,大家好,我是新人创作者:QWQ_chinese . 今天我们来谈一谈,如何在Python中用纯pygame模块制作一个简简单单的画图软件~ 大家看完这篇文章,觉得对自己有好处的,可以点个赞,顺便 ...
- Python简易画图软件开发
可以简单实现清屏.橡皮檫.矩形.直线.箭头.画笔以及颜色的选择 """开发画图软件""" from tkinter import * fro ...
- python操作画图软件_Python绘图工具matplotlib的使用(图形并茂)
matplotlib官网文档: 支持win7_64_bit的matplotlib库下载网址: 简单介绍: matplotlib 是python最著名的画图库,它提供了一整套和matlab类似的命令AP ...
- python画最简单的折线图,推荐origin画图软件
1.因实际需要,需要画一些简单的折线图,详细代码见下: import matplotlib.pyplot as plt import numpy as nplist1=[1,2,3,4,5,6,7,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 ...
- 初学者编写python用什么软件好_初学者编写python用什么软件
初学者编写python用什么软件 以下是常用的几款Python代码编辑器和Python集成开发工具. 一.Python代码编辑器 1. Sublime Text Sublime Text是一款非常流行 ...
最新文章
- 用表格布局2个链接6个图片
- 用Socket 打造跨语言跨操作系统的网络MORPG游戏(二)
- OpenCV---ROI(region of interest)和泛洪填充
- AutoMapper学习笔记
- 计算机系统中字word的描述性定义是,计算机基础练习题1
- 51单片机8路抢答器c语言,51单片机8路抢答器
- 自然语言处理——分词系统(正向最大匹配法)
- GHD官宣全新中国区焕发大使乔欣
- c r 语言教程,R语言初级教程
- 一起来云赏月把!three.js实现vr赏月!
- 【天光学术】汉语言文学论文:浅谈农村初中文言文教学现状及有效策略
- 思科关闭日志_关于思科交换机的日志配置总结
- GEE学习:按照行列号筛选鄱阳湖湖区影像数据并查询相关信息
- uni-app实战之社区交友APP(10)登录、个人空间开发和动画优化
- 智能手环方案开源(含源码,原理图,APP,通信协议等) ...
- 项目进度表:可应用于各行业中的项目进度管控
- “速课小龙”项目冲刺2
- 还在埋头干活?给程序员的几个忠告
- 电子邮箱app有哪些,微信打开邮箱app如何使用,邮件app下载
- python爬虫高级教程,JS逆向之百度翻译