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实现的阳历转阴历(农历)算法
Apr 25 Python
python实现批量改文件名称的方法
May 25 Python
Python实现批量检测HTTP服务的状态
Oct 27 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
Sep 08 Python
Python中pygal绘制雷达图代码分享
Dec 07 Python
分享一下Python数据分析常用的8款工具
Apr 29 Python
基于Python实现用户管理系统
Feb 26 Python
python对文件目录的操作方法实例总结
Jun 24 Python
JAVA SWT事件四种写法实例解析
Jun 05 Python
Python如何爬取b站热门视频并导入Excel
Aug 10 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 04 Python
Python实现批量将文件复制到新的目录中再修改名称
Apr 12 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
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
ASP和PHP都是可以删除自身的
2007/04/09 PHP
Yii安装与使用Excel扩展的方法
2016/07/13 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
js和jquery如何获取图片真实的宽度和高度
2014/09/28 Javascript
jquery实现右侧栏菜单选择操作
2016/03/04 Javascript
全面理解闭包机制
2016/07/11 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
angularJS Provider、factory、service详解及实例代码
2016/09/21 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
JavaScript中的子窗口与父窗口的互相调用问题
2017/02/08 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
django创建自定义模板处理器的实例详解
2017/08/14 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
python类的实例化问题解决
2019/08/31 Python
Python&amp;&amp;GDAL实现NDVI的计算方式
2020/01/09 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
Cpython解释器中的GIL全局解释器锁
2020/11/09 Python
成人大专自我鉴定范文
2013/10/19 职场文书
商务英语专业求职信范文
2014/01/28 职场文书
违纪检讨书2000字
2014/02/08 职场文书
文明村镇申报材料
2014/05/06 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
医学专业大学生职业生涯规划书
2014/10/25 职场文书
委托培训协议书
2014/11/17 职场文书
受资助学生感谢信
2015/01/21 职场文书
车辆挂靠协议书
2016/03/23 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书