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 第三方库的安装及pip的使用详解
May 11 Python
Python爬虫爬取一个网页上的图片地址实例代码
Jan 16 Python
浅谈Python脚本开头及导包注释自动添加方法
Oct 27 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
Python socket实现的文件下载器功能示例
Nov 15 Python
pytorch之inception_v3的实现案例
Jan 06 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
Feb 14 Python
Python Pandas 对列/行进行选择,增加,删除操作
May 17 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
Jun 28 Python
Python中flatten( ),matrix.A用法说明
Jul 05 Python
Python中的特殊方法以及应用详解
Sep 20 Python
Python 实现二叉查找树的示例代码
Dec 21 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 session 预定义数组
2009/03/16 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
DOM基础教程之事件类型
2015/01/20 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
2017/01/22 Javascript
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
AngularJS 控制器 controller的详解
2017/10/17 Javascript
laydate日历控件使用方法详解
2017/11/20 Javascript
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
vue 录制视频并压缩视频文件的方法
2018/07/27 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
react实现换肤功能的示例代码
2018/08/14 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
2018/11/15 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
python 判断一个进程是否存在
2009/04/09 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
如何将PySpark导入Python的放实现(2种)
2020/04/26 Python
应届毕业生自荐信例文
2014/02/26 职场文书
难忘的一课教学反思
2014/04/30 职场文书
春节联欢会策划方案
2014/05/16 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
上诉状格式
2015/05/23 职场文书
JavaWeb 入门篇(3)ServletContext 详解 具体应用
2021/07/16 Java/Android