python实现画图工具


Posted in Python onAugust 27, 2020

简易画图工具(Python),供大家参考,具体内容如下

小黑最近在努力的入门python,正好学习到了Python的tkinker模块下的Canvas(画布)和Button(按钮)再加上相应的事务管理,实现了一个简单的画图小工具。

程序代码

#画图软件的实现
from tkinter.filedialog import *
from tkinter import *
from tkinter.colorchooser import *

win_width=900
win_height=450


class Application(Frame):
  def __init__(self,master=None,bgcolor="#000000"):

    super().__init__(master)
    self.master=master
    self.bgcolor=bgcolor
    self.x=0
    self.y=0
    self.fgcolor="#ff0000"
    self.lastDraw=0 #表示最后绘制的图形的id
    self.startDrawFlag=False
    self.pack()
    self.createWidget()
def createWidget(self):
  # 创建画板
  self.drawCad=Canvas(self,width=win_width,height=win_height*0.9,bg=self.bgcolor)
  self.drawCad.pack()
  # 创建按钮
  btn_start = Button(self,text="开始",name="start")
  btn_start.pack(side="left",padx=10)
  btn_pen = Button(self, text="画笔", name="pen")
  btn_pen.pack(side="left", padx=10)
  btn_rect = Button(self, text="矩形", name="rect")
  btn_rect.pack(side="left", padx=10)
  btn_clear = Button(self, text="清屏", name="clear")
  btn_clear.pack(side="left", padx=10)
  btn_earsor = Button(self, text="橡皮擦", name="earsor")
  btn_earsor.pack(side="left", padx=10)
  btn_line = Button(self, text="直线", name="line")
  btn_line.pack(side="left", padx=10)
  btn_lineArrow = Button(self, text="箭头直线", name="lineArrow")
  btn_lineArrow.pack(side="left", padx=10)
   btn_color = Button(self, text="颜色", name="color")
  btn_color.pack(side="left", padx=10)
  #为按钮绑定事件
  btn_pen.bind_class("Button","<1>",self.eventManger)
  self.drawCad.bind("<ButtonRelease-1>",self.stopDraw)
def eventManger(self,event):
  name=event.widget.winfo_name()
  print(name)
  if name=="line" :
    self.drawCad.bind("<B1-Motion>",self.myline)
  elif name=="lineArrow":
    self.drawCad.bind("<B1-Motion>", self.mylineArrow)
  elif name=="rect":
    self.drawCad.bind("<B1-Motion>", self.myRect)
  elif name=="pen":
    self.drawCad.bind("<B1-Motion>", self.myPen)
  elif name=="earsor":
    self.drawCad.bind("<B1-Motion>", self.myEarsor)
  elif name=="clear":
    self.drawCad.delete("all")
  elif name=="color":
   c= askcolor(color=self.fgcolor,title="画笔选择颜色")
    self.fgcolor=c[1]

def myline(self,event):
  self.startDraw(event)
  self.lastDraw=self.drawCad.create_line(self.x,self.y,event.x,event.y,fill=self.fgcolor)

def mylineArrow(self,event):
  self.startDraw(event)
  self.lastDraw = self.drawCad.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.drawCad.create_rectangle(self.x, self.y, event.x, event.y, outline=self.fgcolor)

def myPen(self,event):
  self.startDraw(event)
  self.drawCad.create_rectangle(self.x, self.y, event.x, event.y, outline=self.fgcolor)
  self.x=event.x
  self.y=event.y
def myEarsor(self,event):
  self.startDraw(event)
  self.drawCad.create_rectangle(event.x-4, event.y-4, event.x+4, event.y+4, fill=self.bgcolor)
  self.x = event.x
  self.y = event.y
def stopDraw(self,event):
  self.startDrawFlag=False
  self.lastDraw=0

def startDraw(self,event):
  self.drawCad.delete(self.lastDraw)
  if not self.startDrawFlag:
    self.startDrawFlag = True
    self.x = event.x
    self.y = event.y
root=Tk()
app=Application(root)
root.title("简易的画图工具")
root.geometry(str(win_width)+"x"+str(win_height)+"+100+100")
root.mainloop()

结果展示

python实现画图工具

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python用10行代码实现对黄色图片的检测功能
Aug 10 Python
5个很好的Python面试题问题答案及分析
Jan 19 Python
Python tkinter事件高级用法实例
Jan 31 Python
Python实现上下班抢个顺风单脚本
Feb 07 Python
Python中利用xpath解析HTML的方法
May 14 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
python实现微信每日一句自动发送给喜欢的人
Apr 29 Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
Sep 25 Python
Python第三方库的几种安装方式(小结)
Apr 03 Python
jupyter 使用Pillow包显示图像时inline显示方式
Apr 24 Python
Python基础之数据类型知识汇总
May 18 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
Aug 27 #Python
基于python实现操作redis及消息队列
Aug 27 #Python
Python3如何在服务器打印资产信息
Aug 27 #Python
python 8种必备的gui库
Aug 27 #Python
Django静态文件加载失败解决方案
Aug 26 #Python
Python趣味入门教程之循环语句while
Aug 26 #Python
Python脚本实现Zabbix多行日志监控过程解析
Aug 26 #Python
You might like
PHP开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
2015/07/09 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
js 省地市级联选择
2010/02/07 Javascript
网络图片延迟加载实现代码 超越jquery控件
2010/03/27 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
js中函数声明与函数表达式
2015/06/03 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
关于Javascript回调函数的一个妙用
2016/08/29 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
JS获取多维数组中相同键的值实现方法示例
2017/01/06 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
gulp解决跨域的配置文件问题
2017/06/08 Javascript
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
使用Python更换外网IP的方法
2018/07/09 Python
python占位符输入方式实例
2019/05/27 Python
Python面向对象编程基础实例分析
2020/01/17 Python
python之生成多层json结构的实现
2020/02/27 Python
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
weblogic面试题
2016/03/07 面试题
大学生第一学年自我鉴定
2014/09/12 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
导游词之四川武侯祠
2019/10/21 职场文书
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL
MySQL主从切换的超详细步骤
2022/06/28 MySQL