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 30 Python
基于ID3决策树算法的实现(Python版)
May 31 Python
python3中获取文件当前绝对路径的两种方法
Apr 26 Python
python爱心表白 每天都是浪漫七夕!
Aug 18 Python
详解Python 正则表达式模块
Nov 05 Python
python对列进行平移变换的方法(shift)
Jan 10 Python
python opencv实现图像边缘检测
Apr 29 Python
django 消息框架 message使用详解
Jul 22 Python
python 使用shutil复制图片的例子
Dec 13 Python
Python requests模块安装及使用教程图解
Jun 30 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
Nov 02 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 07 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新手上路(五)
2006/10/09 PHP
用 PHP5 轻松解析 XML
2006/12/04 PHP
PHP中的事务使用实例
2015/05/26 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
用JS在浏览器中创建下载文件
2014/03/05 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
2015/04/25 Javascript
javascript中indexOf技术详解
2015/05/07 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
微信小程序 教程之wxapp 视图容器 view
2016/10/19 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
Vue源码学习之初始化模块init.js解析
2017/11/02 Javascript
JS中的BOM应用
2018/02/02 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
2018/08/08 jQuery
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
vue router 用户登陆功能的实例代码
2019/04/24 Javascript
基于vue写一个全局Message组件的实现
2019/08/15 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
Python常用模块用法分析
2014/09/08 Python
python实现堆栈与队列的方法
2015/01/15 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
Python3.7 dataclass使用指南小结
2019/02/22 Python
python中的decimal类型转换实例详解
2019/06/26 Python
html5贪吃蛇游戏使用63行代码完美实现
2013/06/25 HTML / CSS
土木工程师岗位职责
2013/11/24 职场文书
自荐书范文
2013/12/08 职场文书
《两个铁球同时着地》教学反思
2014/02/13 职场文书
如何写一封打动人心的求职信
2014/02/17 职场文书
裁员通知
2015/04/25 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书
2016年国庆节新闻稿范文
2015/11/25 职场文书