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/ironpython:从入门到精通
Oct 02 Python
Python MD5文件生成码
Jan 12 Python
python标准算法实现数组全排列的方法
Mar 17 Python
python中的装饰器详解
Apr 13 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
新手如何快速入门Python(菜鸟必看篇)
Jun 10 Python
python批量从es取数据的方法(文档数超过10000)
Dec 27 Python
python调用虹软2.0第三版的具体使用
Feb 22 Python
Python 实现数组相减示例
Dec 27 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 24 Python
Python lxml库的简单介绍及基本使用讲解
Dec 22 Python
python 基于DDT实现数据驱动测试
Feb 18 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中static关键字原理的学习研究分析
2011/07/18 PHP
php实现图片文件与下载文件防盗链的方法
2014/11/03 PHP
PHP中使用Imagick操作PSD文件实例
2015/01/26 PHP
深入理解PHP中的count函数
2016/05/31 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
Javascript !!的作用
2008/12/04 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
微信小程序 flex实现导航实例详解
2017/04/26 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
[01:36]极致酷炫!TI9典藏宝瓶+撼地者至宝展示
2019/06/11 DOTA
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
python批量提取word内信息
2015/08/09 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
python3转换code128条形码的方法
2019/04/17 Python
Django 大文件下载实现过程解析
2019/08/01 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
2019/08/05 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
Web时代变迁及html5与html4的区别
2016/01/06 HTML / CSS
戴尔美国官网:Dell
2016/08/31 全球购物
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
建筑专业毕业生推荐信
2013/11/21 职场文书
暑期实习鉴定
2013/12/16 职场文书
淘宝客服自我总结鉴定
2014/01/25 职场文书
对标管理实施方案
2014/03/12 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
2014年销售工作总结
2014/12/01 职场文书
讲座通知范文
2015/04/23 职场文书
2015年教研室工作总结范文
2015/05/23 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
python操作xlsx格式文件并读取
2021/06/02 Python
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python