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中使用urllib2防止302跳转的代码例子
Jul 07 Python
Python+OpenCV目标跟踪实现基本的运动检测
Jul 10 Python
python中cPickle类使用方法详解
Aug 27 Python
PyQt5实现QLineEdit添加clicked信号的方法
Jun 25 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
Jun 28 Python
Python实现计算图像RGB均值方式
Jun 04 Python
使用keras实现非线性回归(两种加激活函数的方式)
Jul 05 Python
python实现学生管理系统开发
Jul 24 Python
Python基于callable函数检测对象是否可被调用
Oct 16 Python
Python pip 常用命令汇总
Oct 19 Python
python 制作网站筛选工具(附源码)
Jan 21 Python
pycharm部署django项目到云服务器的详细流程
Jun 29 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
无数据库的详细域名查询程序PHP版(2)
2006/10/09 PHP
高质量PHP代码的50个实用技巧必备(上)
2016/01/22 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
2016/03/07 PHP
Zend Framework框架路由机制代码分析
2016/03/22 PHP
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
PHP+redis实现微博的推模型案例分析
2019/07/10 PHP
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
js获取多个tagname的节点数组
2013/09/22 Javascript
jQuery的each终止或跳过示例代码
2013/12/12 Javascript
jquery插件推荐浏览器嗅探userAgent
2014/11/09 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
js表单验证实例讲解
2016/03/31 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
puppeteer实现html截图的示例代码
2019/01/10 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
python实现将pvr格式转换成pvr.ccz的方法
2015/04/28 Python
python关键字and和or用法实例
2015/05/28 Python
django主动抛出403异常的方法详解
2019/01/04 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
pytorch读取图像数据转成opencv格式实例
2020/06/02 Python
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
HTML5 文件域+FileReader 分段读取文件并上传到服务器
2017/10/23 HTML / CSS
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
台湾森森购物网:U-mall
2017/10/16 全球购物
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
出国留学计划书
2014/04/27 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
万能检讨书
2015/01/27 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
计划生育责任书
2015/05/09 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL