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 相关文章推荐
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
Python中max函数用于二维列表的实例
Apr 03 Python
python实现电脑自动关机
Jun 20 Python
Python基于多线程实现抓取数据存入数据库的方法
Jun 22 Python
python 文件转成16进制数组的实例
Jul 09 Python
Python退火算法在高次方程的应用
Jul 26 Python
python实现朴素贝叶斯算法
Nov 19 Python
python远程调用rpc模块xmlrpclib的方法
Jan 11 Python
深入解析神经网络从原理到实现
Jul 26 Python
Node.js 和 Python之间该选择哪个?
Aug 05 Python
python如何写个俄罗斯方块
Nov 06 Python
使用Python实现音频双通道分离
Dec 25 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微信开发自定义菜单
2016/08/27 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
JavaScript下申明对象的几种方法小结
2008/10/02 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
JQuery中$.each 和$(selector).each()的区别详解
2015/03/13 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
Vue中实现回车键切换焦点的方法
2020/02/19 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
Python程序设计入门(3)数组的使用
2014/06/16 Python
Python中的tuple元组详细介绍
2015/02/02 Python
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
使用Python求解最大公约数的实现方法
2015/08/20 Python
python实现批量修改文件名代码
2017/09/10 Python
python 通过xml获取测试节点和属性的实例
2018/03/31 Python
详解numpy的argmax的具体使用
2019/05/27 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
澳大利亚儿童和婴儿产品在线商店:Lime Tree Kids
2017/10/05 全球购物
免税水晶:Duty Free Crystal
2019/05/13 全球购物
社区庆八一活动方案
2014/02/02 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang