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实现扫描端口示例
Mar 29 Python
python中global用法实例分析
Apr 30 Python
python寻找list中最大值、最小值并返回其所在位置的方法
Jun 27 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 Python
浅谈pycharm出现卡顿的解决方法
Dec 03 Python
python paramiko远程服务器终端操作过程解析
Dec 14 Python
python自动识别文本编码格式代码
Dec 26 Python
Python3 io文本及原始流I/O工具用法详解
Mar 23 Python
python实现学生管理系统开发
Jul 24 Python
Kmeans均值聚类算法原理以及Python如何实现
Sep 26 Python
Pycharm中如何关掉python console
Oct 27 Python
解决python 执行shell命令无法获取返回值的问题
Dec 05 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进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
2017/04/25 Javascript
react 父组件与子组件之间的值传递的方法
2017/09/14 Javascript
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
利用vue.js把静态json绑定bootstrap的table方法
2018/08/28 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
ES6基础之字符串和函数的拓展详解
2019/08/22 Javascript
基于ts的动态接口数据配置的详解
2019/12/18 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
Python 命令行参数sys.argv
2008/09/06 Python
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
Python函数中定义参数的四种方式
2014/11/30 Python
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
docker-py 用Python调用Docker接口的方法
2019/08/30 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
耐克亚太地区:Nike APAC
2019/12/07 全球购物
体育专业个人的求职信范文
2013/09/21 职场文书
管理失职检讨书
2015/05/05 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书