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操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
不管你的Python报什么错,用这个模块就能正常运行
Sep 14 Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 Python
python整合ffmpeg实现视频文件的批量转换
May 31 Python
python实现倒计时小工具
Jul 29 Python
python导入不同目录下的自定义模块过程解析
Nov 18 Python
python 协程 gevent原理与用法分析
Nov 22 Python
Django app配置多个数据库代码实例
Dec 17 Python
Python实现钉钉订阅消息功能
Jan 14 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
Feb 10 Python
Pytorch上下采样函数--interpolate用法
Jul 07 Python
Python 如何实现文件自动去重
Jun 02 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面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
php无限遍历文件夹示例分享
2014/03/04 PHP
PHP生成树的方法
2015/07/28 PHP
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
2016/06/18 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
vue+element实现批量删除功能的示例
2018/02/28 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
Python-基础-入门 简介
2014/08/09 Python
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
使用python获取csv文本的某行或某列数据的实例
2018/04/03 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
python 实现目录复制的三种小结
2019/12/04 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
python中用ctypes模拟点击的实例讲解
2020/11/26 Python
使用Python实现音频双通道分离
2020/12/25 Python
美国女孩洋娃娃店:American Girl
2017/10/24 全球购物
机关门卫岗位职责
2013/12/30 职场文书
房屋委托书范本
2014/04/04 职场文书
小学家长评语大全
2014/04/16 职场文书
分公司负责人任命书
2014/06/04 职场文书
班主任与学生安全责任书
2014/07/25 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
创业计划之特色精品店
2019/08/12 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js