Python实现画图软件功能

article/2025/6/28 18:35:35

概述

虽然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'

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

源码链接

备注

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


http://chatgpt.dhexx.cn/article/iT6ErFVg.shtml

相关文章

【软件工程导论题型大总结】画图题总结

pdf下载&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】软件工程导论第六版&#xff08;张海藩&#xff09;专栏学习笔记目录导航 文章目录 一&#xff1a;概要&#xff08;各章图形及对应符号&#xff09;&#xff08;1&#xff09;传统软件工程部分A&#xff1a;可…

vb模仿画图软件

文章目录 介绍代码&制作v1.0v2.0v3.0v3.1v4.x&#xff1a;新的更新&#xff01;&#xff01;&#xff01; 下载地址附言 介绍 制作&#xff1a;Morgan 工具&#xff1a;VisualBasic6.0 邮箱&#xff1a;MorganFish0508163.com1037502595qq.com GitHub&#xff1a;https…

程序员软件工程常用的画图软件推荐

常用图&#xff0c;ER 图&#xff0c;类图等 画这样的图&#xff0c;一般使用 Draw.io 这款免费的在线网页绘图工具就可以解决了。 优点如下&#xff1a; 无需登录&#xff0c;直接进入网页就可以直接使用海量模板新建项目。 https://app.diagrams.net 进入编辑页面&#xff…

推荐好用在线画图网站

1.免费在线流程图思维导图 2.多功能设计及制图工具 3.Flowchart Maker & Online Diagram Software

免费画图软件推荐 - draw.io

一、背景 很早之前在 windows 系统上使用 visio 画图很爽。 自从用了 mac 之后没找到特别趁手的画图软件。 之前尝试过 processon &#xff0c;挺不错&#xff0c;可以在线画图&#xff0c;但是有数量限制&#xff0c;超过几个之后只能付费。 而且入职阿里之后公司不允许用外…

python画图软件是哪个_python画图软件是哪个

Matplotlib是一个Python的2D绘图库&#xff0c;它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过Matplotlib&#xff0c;开发者可以仅需要几行代码&#xff0c;便可以生成绘图。一般可绘制折线图、散点图、柱状图、饼图、直方图、子图等等。Matplot使用Num…

这款手绘风格的在线制图软件超棒

在线流程图制作软件 说到流程图制作&#xff0c;你可能会用Microsoft Office Visio&#xff0c;然而这个软件太重量级了。现在在线制图软件也做的很好了&#xff0c;比如ProcessOn&#xff0c;它的用户体验非常好。但是这款软件免费版只能制作9张图&#xff0c;之后就需要付费…

SMC在线气动制图软件PneuDraw

SMC在线气动制图软件PneuDraw https://etools.smc.at/ 进入后&#xff0c;页面各区如下&#xff1a; 1.工具栏&#xff08;和office的工具栏差不多&#xff0c;都是各种基础设置&#xff0c;文件导入导出功能&#xff09; 2.常用功能按钮&#xff08;如缩放&#xff0c;连线&…

计算机自带的画图软件工具介绍,电脑自带画图软件

win7自带画图工具是win7电脑系统里面自带的画图工具。如果你的电脑里面没有这款工具&#xff0c;但是你又需要它的话&#xff0c;您可以来比克尔下载&#xff0c;感受与电脑自带画图工具一样的体验。 画图在系统里所在位置&#xff1a;win-所有程序-附件-画图 win7自带画图工具…

小学计算机课画图软件,小学小学三年级信息技术使用画图软件(一)

小学小学三年级信息技术使用画图软件(一) (3页) 本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01; 3.9 积分 第一课第一课 在电脑上画画在电脑上画画——使用画图软件(一)教学目标:1、认识“画图”软件…

用计算机画图软件画画教程,电脑画图软件有什么使用技巧,电脑画图软件教程...

一、第一步是点击右下角的“开始”图标。在开头上方&#xff0c;出现一个对话框&#xff0c;您找到“所有应用程序”&#xff0c;您右键单击鼠标&#xff0c;在出现的对话框中&#xff0c;您找到“附件”&#xff0c;您左键单击鼠标&#xff0c;在“附件”的右侧出现一个对话框…

常用9款在线作图工具,总有一款适合你!

转自&#xff1a;精选七款国内外著名的在线作图工具 最近想在团队里使用在线作图工具&#xff0c;使用的在线工具的原因是&#xff0c;一来免得大家再安装本地软件&#xff0c;二来在线工具在多人共享&#xff0c;团队协作方面的优势更大&#xff0c;再者就是只要有网络&#x…

在线画图工具绘制流程图怎样画

现在有很多可以在线画图的网站。软件得到了很多人的青睐&#xff0c;并且这些在线画图工具给用户的体验度以及绘制时的感觉都是极佳的一致获得好评&#xff0c;那利用在线画图工具绘制流程图怎样画呢&#xff1f;下面分享的在迅捷画图中绘制流程图的操作方法介绍&#xff0c;希…

Draw.io | 一款强大且支持在线编辑和导出的流程图绘制神器

目录 &#x1f48c; 写在前面 &#x1f5a5;️ 软件介绍 &#x1f5a5;️ 使用方式 1. Draw.io 的核心设计元素 1.1 绘图区 1.2 快速开始 2. Draw.io 的基本操作 2.1 移动、多选、复制与删除 2.2 创建链接 2.3 图形替换与旋转 3. 使用 Draw.io 绘制简单流程图 3.1 基本…

常见的考勤管理系统有哪些功能?

今天给大伙介绍一下欢雀HR系统&#xff0c;考虑到最近很多企业都在咨询考勤模块&#xff0c;所以今天简单介绍下欢雀HR系统里考勤管理模块的各个功能。如果有哪些地方没说到&#xff0c;希望大家指出。 首先&#xff0c;企业通过欢雀APP&#xff0c;员工可以一键打卡&#xff0…

汉王考勤管理系统使用教程

汉王考勤管理系统使用教程 软件简介 汉王考勤管理系统标准版是汉王公司集多年从事考勤系统管理与研发经验推出的新一代C/S架构的考勤管理系统&#xff0c;可应用于局域网和广域网。结合汉王人脸通考勤产品&#xff0c;公司考勤管理员通过本系统可以简单清晰地统计员工考勤信息…

企业考勤管理系统

目录 TOC \o "1-3" \h \u 1 概述................................................................................................................................. 1 1.1设计背景.........................................................................…

中控考勤机web3.0登录账号密码

公司考勤机是中控的&#xff0c;最近有个hr项目可能需要登陆web&#xff0c;但没有密码&#xff0c;怎么搞。。。。 上中控官网查询2种方式默认密码&#xff1a; 1.账户&#xff1a;administrator,密码&#xff1a;123456 第二种为直接使用如下地址 http://192.168.2.253/c…

强大的考勤管理

考勤管理是OA系统中一项很有用的功能。 总体来说&#xff0c;通过OA系统进行考勤有两种方式&#xff1a;一种是将OA系统与考勤机连接&#xff0c;员工在考勤机上打卡&#xff0c;管理员在OA系统上汇总和管理考勤数据&#xff1b;另一种则是直接在OA系统上打卡&#xff0c;直接统…

用Python读取考勤机卡式报表并处理成常规的行式报表格式

1. 场景&#xff1a; 在做公司的临时工考勤工资表时&#xff0c;考勤机导出的excel为卡式报表&#xff0c;看很直观&#xff0c;但处理起来麻烦。所以做了一个odoo模块用于将卡式报表处理成更常规的适合财务统计的普通报表。语言Python,用到的模块为xlrd和xlwt。 2.先看效果 …