wxPython实现绘图小例子


Posted in Python onNovember 19, 2019

本文实例为大家分享了wxPython绘图小例子的具体实现代码,供大家参考,具体内容如下

一个绘图的例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
'''
  Function:绘图
  Input:NONE
  Output: NONE
  author: socrates
  blog:http://www.cnblogs.com/dyx1024/
  date:2012-07-11
''' 
 
import wx
 
class PaintWindow(wx.Window):
    def __init__(self, parent, id):
      wx.Window.__init__(self, parent, id)
      self.SetBackgroundColour("Red")
      self.color = "Green"
      self.thickness = 10
    
      #创建一个画笔
      self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)
      self.lines = []
      self.curLine = []
      self.pos = (0, 0)
      self.InitBuffer()
    
      #连接事件
      self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
      self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
      self.Bind(wx.EVT_MOTION, self.OnMotion)
      self.Bind(wx.EVT_SIZE, self.OnSize)
      self.Bind(wx.EVT_IDLE, self.OnIdle)
      self.Bind(wx.EVT_PAINT, self.OnPaint)
    
    def InitBuffer(self):
      size = self.GetClientSize()
      
      #创建缓存的设备上下文
      self.buffer = wx.EmptyBitmap(size.width, size.height)
      dc = wx.BufferedDC(None, self.buffer)
      
      #使用设备上下文
      dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
      dc.Clear()
      self.DrawLines(dc)
      self.reInitBuffer = False
      
    def GetLinesData(self):
      return self.lines[:]
    
    def SetLinesData(self, lines):
      self.lines = lines[:]
      self.InitBuffer()
      self.Refresh()
      
    def OnLeftDown(self, event):
      self.curLine = []
      
      #获取鼠标位置
      self.pos = event.GetPositionTuple()
      self.CaptureMouse()
      
    def OnLeftUp(self, event):
      if self.HasCapture():
        self.lines.append((self.color,
                  self.thickness,
                  self.curLine))
        self.curLine = []
        self.ReleaseMouse()
        
    def OnMotion(self, event):
      if event.Dragging() and event.LeftIsDown():
        dc = wx.BufferedDC(wx.ClientDC(self), self.buffer)
        self.drawMotion(dc, event)
      event.Skip()
    
    def drawMotion(self, dc, event):
      dc.SetPen(self.pen)
      newPos = event.GetPositionTuple()
      coords = self.pos + newPos
      self.curLine.append(coords)
      dc.DrawLine(*coords)
      self.pos = newPos
      
    def OnSize(self, event):
      self.reInitBuffer = True
    
    def OnIdle(self, event):
      if self.reInitBuffer:
        self.InitBuffer()
        self.Refresh(False)
    
    def OnPaint(self, event):
      dc = wx.BufferedPaintDC(self, self.buffer)
      
    def DrawLines(self, dc):
      for colour, thickness, line in self.lines:
        pen = wx.Pen(colour, thickness, wx.SOLID)
        dc.SetPen(pen)
        for coords in line:
          dc.DrawLine(*coords)
    
    def SetColor(self, color):
      self.color = color
      self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)
      
    def SetThickness(self, num):
      self.thickness = num
      self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)
      
class PaintFrame(wx.Frame):
  def __init__(self, parent):
    wx.Frame.__init__(self, parent, -1, "Panit Frame", size = (800, 600))
    self.paint = PaintWindow(self, -1)
    
if __name__ == '__main__':
  app = wx.PySimpleApp()
  frame = PaintFrame(None)
  frame.Show(True)
  app.MainLoop()

测试:

wxPython实现绘图小例子

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

Python 相关文章推荐
从零学Python之入门(四)运算
May 27 Python
python使用PyGame模块播放声音的方法
May 20 Python
Python中datetime模块参考手册
Jan 13 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
Jan 23 Python
python使用opencv驱动摄像头的方法
Aug 03 Python
关于python多重赋值的小问题
Apr 17 Python
Python趣味入门教程之循环语句while
Aug 26 Python
python 实现一个图形界面的汇率计算器
Nov 09 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
Dec 24 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 Python
python ansible自动化运维工具执行流程
Jun 24 Python
Python可视化学习之seaborn调色盘
Feb 24 Python
python 如何去除字符串头尾的多余符号
Nov 19 #Python
wxPython实现画图板
Aug 27 #Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
Nov 19 #Python
Python高级特性之闭包与装饰器实例详解
Nov 19 #Python
Python高级编程之继承问题详解(super与mro)
Nov 19 #Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 #Python
Python csv文件的读写操作实例详解
Nov 19 #Python
You might like
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
理解Javascript_07_理解instanceof实现原理
2010/10/15 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
2014/05/05 Javascript
javascript定义变量时有var和没有var的区别探讨
2014/07/21 Javascript
深入理解javascript严格模式(Strict Mode)
2014/11/28 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
Python文档生成工具pydoc使用介绍
2015/06/02 Python
python监控键盘输入实例代码
2018/02/09 Python
python 中的list和array的不同之处及转换问题
2018/03/13 Python
python指定写入文件时的编码格式方法
2018/06/07 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
Python实现多进程的四种方式
2019/02/22 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
python将字符串list写入excel和txt的实例
2019/07/20 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
荷兰优雅女装网上商店:Heine
2016/11/14 全球购物
旧时光糖果:Old Time Candy
2018/02/05 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
通用自荐信范文
2014/03/14 职场文书
职业生涯规划书结束语
2014/04/15 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
贷款收入证明格式
2015/06/24 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书