Python实现画图软件功能,windows的画图功能不能实现

概述

虽然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 绑定事件

示例效果图

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

核心代码

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

创建画板

1 """创建画图区域"""

2 self.drawpad = Canvas(self, width=win_width, height=win_height, bg=bgcolor)3 self.drawpad.pack()

View Code

创建按钮

1 #创建按钮

2 self.btn_start = Button(self, name='start', text='开始')3 self.btn_start.pack(side='left', padx=10)4 self.btn_pen = Button(self, name='pen', text='画笔')5 self.btn_pen.pack(side='left', padx=10)6 self.btn_rect = Button(self, name='rect', text='矩形')7 self.btn_rect.pack(side='left', padx=10)8 self.btn_clear = Button(self, name='clear', text='清屏')9 self.btn_clear.pack(side='left', padx=10)10 self.btn_erasor = Button(self, name='erasor', text='橡皮擦')11 self.btn_erasor.pack(side='left', padx=10)12 self.btn_line = Button(self, name='line', text='直线')13 self.btn_line.pack(side='left', padx=10)14 self.btn_line_arrow = Button(self, name='line_arrow', text='箭头直线')15 self.btn_line_arrow.pack(side='left', padx=10)16 self.btn_color = Button(self, name='color', text='颜色')17 self.btn_color.pack(side='left', padx=10)

View Code

绑定事件

1 #绑定事件

2 self.btn_line.bind('', self.eventManager) #点击按钮事件

3 self.btn_line_arrow.bind('', self.eventManager) #点击按钮事件

4 self.btn_rect.bind('', self.eventManager) #点击按钮事件

5 self.btn_pen.bind('', self.eventManager) #点击按钮事件

6 self.btn_erasor.bind('', self.eventManager) #点击按钮事件

7 self.btn_clear.bind('', self.eventManager) #点击按钮事件

8 self.btn_color.bind('', self.eventManager) #点击按钮事件

View Code

功能实现

1 defeventManager(self, event):2 name =event.widget.winfo_name()3 print(name)4 self.start_flag =True5 if name == 'line':6 #左键拖动

7 self.drawpad.bind('', self.myline)8 elif name == 'line_arrow':9 self.drawpad.bind('', self.myline_arrow)10 elif name == 'rect':11 self.drawpad.bind('', self.myrect)12 elif name == 'pen':13 self.drawpad.bind('', self.mypen)14 elif name == 'erasor':15 self.drawpad.bind('', self.myerasor)16 elif name == 'clear':17 self.drawpad.delete('all')18 elif name == 'color':19 c = askcolor(color=self.fgcolor, title='请选择颜色')20 print(c) #c的值 ((128.5, 255.99609375, 0.0), '#80ff00')

21 self.fgcolor = c[1]22

23 defstartDraw(self, event):24 self.drawpad.delete(self.lastdraw)25 ifself.start_flag:26 self.start_flag =False27 self.x =event.x28 self.y =event.y29

30 defstopDraw(self, event):31 self.start_flag =True32 self.lastdraw =033

34 defmyline(self, event):35 self.startDraw(event)36 self.lastdraw = self.drawpad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor)37

38 defmyline_arrow(self, event):39 self.startDraw(event)40 self.lastdraw = self.drawpad.create_line(self.x, self.y, event.x, event.y, arrow=LAST, fill=self.fgcolor)41

42 defmyrect(self, event):43 self.startDraw(event)44 self.lastdraw = self.drawpad.create_rectangle(self.x, self.y, event.x, event.y, outline=self.fgcolor)45

46 defmypen(self, event):47 self.startDraw(event)48 print('self.x=', self.x, ',self.y=', self.y)49 self.drawpad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor)50 self.x =event.x51 self.y =event.y52

53 defmyerasor(self, event):54 self.startDraw(event)55 print('self.x=', self.x, ',self.y=', self.y)56 self.drawpad.create_rectangle(event.x - 3, event.y - 3, event.x + 3, event.y + 3, fill=bgcolor)57 self.x =event.x58 self.y = event.y

View Code

快捷键的实现

1 self.master.bind('', self.hotKey) #绑定快捷键

2 self.master.bind('', self.hotKey) #绑定快捷键

3 self.master.bind('', self.hotKey) #绑定快捷键

4 self.master.bind('', self.hotKey) #绑定快捷键

5 self.drawpad.bind('', self.stopDraw) #左键释放按钮

View Code

快捷键功能实现

1 defhotKey(self, event):2 c =event.char3 if c == 'r':4 self.fgcolor = 'red'

5 elif c == 'g':6 self.fgcolor = 'green'

7 elif c == 'b':8 self.fgcolor = 'blue'

9 elif c == 'y':10 self.fgcolor = 'yellow'

View Code

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

源码链接

备注

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

python安装后不能画图_Python实现画图软件功能,windows的画图功能不能实现相关推荐

  1. python安装后怎么打开_python软件怎么打开

    不能用.就不能算是安装成功.肯定是出错了.建议重新下载安装看看.1.选择installforallusers,然后一路点"Next",就会将python2.7.11默认安装至C盘下 ...

  2. python安装后没有命令_Python的下载安装

    本教程主要是针对Windows系统用于的安装,简单的教大家如何下载和安装Python. 进入Python官网 官网地址:https://www.python.org/ 点击上图中的Download后, ...

  3. python安装后在哪里找_python安装后的目录在哪里

    python安装后的目录在哪里,解决方法,命令行,路径,找不到,其他的 python安装后的目录在哪里 易采站长站,站长之家为您整理了python安装后的目录在哪里的相关内容. 从官网下载python ...

  4. python安装后找不到目录_python安装后的目录在哪里

    从官网下载python的安装包,安装过程中可选择装在C盘或D盘或者其他的磁盘. 如果忘记了安装在哪里,可以在命令行中使用以下命令 where python 会显示python的绝对路径 C:\User ...

  5. 安装完python后怎么使用-python安装后怎么启用

    用于Windows的Python启动器是一个实用程序,可帮助定位和执行不同的Python版本.它允许脚本(或命令行)指示特定Python版本的首选项,并将定位并执行该版本. 与 PATH 变量不同,启 ...

  6. 安装完python怎么打开-python安装后怎么启用

    用于Windows的Python启动器是一个实用程序,可帮助定位和执行不同的Python版本.它允许脚本(或命令行)指示特定Python版本的首选项,并将定位并执行该版本. 与 PATH 变量不同,启 ...

  7. 电脑安装python为什么不能用-python安装后不能运行怎么办

    使用Pyhton自身提供的交互式解释器 在Linux.Windows.Mac OS的命令行窗口或Shell窗口,执行python命令,启动Python交互式解释器.交互式解释器会等待用户输入Pytho ...

  8. python安装后怎样配解释器_python解释器安装教程以及环境变量的配置

    最上边是两个最新的版本,长期计划,推荐使用python3,如果长期打算用python3,默认使用最新版本.如果想要下载具体的哪个版本也是可以的 各个版本的区别,一般下载可执行的文件,双击可安装的. 下 ...

  9. python安装后使用_Python安装后如何使用?

    Python是跨平台性的,几乎所有的Python程序可以不加修改的运行在不同操作平台上,并能得到同样的结果. Python语言是一种典型的脚本语言,简洁,语法约束少,接近人类语言.有丰富的数据结构,例 ...

  10. python卸载后第三方库_Python第三方库安装和卸载

    1. 安装第三方库虽然在Python安装库的方式非常简单,因为错误经常出现在不同的环境中,我们提供尽可能多的安装方法,以避免无法安装.注意:所有Dos下执行以下命令,不是在编辑环境中.如果系统提示您\ ...

最新文章

  1. 【Go】Go基础(四):流程控制(控制结构)
  2. P1843 奶牛晒衣服(贪心)
  3. c语言运动会分数统计系统_初学C语言Bug大赏
  4. 实验吧逆向catalyst-system——WP
  5. 事务的特性和隔离级别
  6. 【POJ - 1995】Raising Modulo Numbers(裸的快速幂)
  7. C#开发微信门户及应用(32)--微信支付接入和API封装使用
  8. 新网数十万域名管理密码泄露
  9. Oracle 无备份情况下的恢复--密码文件/参数文件
  10. windows分辨率修改工具_小视频压缩、倒放,这些小工具轻松搞定
  11. ROM PROM EPROM EEPROM FLASH(NAND、NOR)
  12. UltraEdit 所有快捷键 说明
  13. 正则表达式学习笔记系列----1
  14. 网络限速软件测试大乐,宽带测速谁靠谱?网速测试软件大对比
  15. 【游戏开发引擎】 实验3:Captain Blaster 2D 滚动射击游戏
  16. [语义分割]CTNet: Context-based Tandem Network for Semantic Segmentation
  17. Spring In Action 第四版:中文、英文、源码
  18. C语言程序设计(11.28)
  19. Docker各操作系统安装方式及优缺点
  20. html下拉刷新原理,科技常识:移动端下拉刷新头实现原理及代码实现

热门文章

  1. linux中exec的用法
  2. Xshell- Xftp评估过期处理方法
  3. web前端基础 html5+css3(七.PS切图与项目实战(学成在线))
  4. 如何解决DNS解析错误故障
  5. 【LeetCode】389. 找不同
  6. 中国医科大计算机在线作业答案,16秋中国医科大学《计算机应用基础(中专起点大专)》在线作业标准答案包100分...
  7. Linux下实现双机互信
  8. cordova 指纹验证登录
  9. Linux中常见的ping不通百度问题
  10. firefox火狐同步windows和linux书签