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中split方法用法分析
Apr 17 Python
Python使用shelve模块实现简单数据存储的方法
May 20 Python
python3学生名片管理v2.0版
Nov 29 Python
python处理大日志文件
Jul 23 Python
flask框架单元测试原理与用法实例分析
Jul 23 Python
Python OpenCV调用摄像头检测人脸并截图
Aug 20 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
Sep 06 Python
python3 字符串知识点学习笔记
Feb 08 Python
Tensorflow 卷积的梯度反向传播过程
Feb 10 Python
python 获取当前目录下的文件目录和文件名实例代码详解
Mar 10 Python
PyTorch-GPU加速实例
Jun 23 Python
matplotlib之pyplot模块实现添加子图subplot的使用
Apr 25 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
ip签名探针
2006/10/09 PHP
php使用PDO操作MySQL数据库实例
2014/12/30 PHP
PHP 实现类似js中alert() 提示框
2015/03/18 PHP
php转换颜色为其反色的方法
2015/04/27 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
js控制表单奇偶行样式的简单方法
2013/07/31 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
jquery判断元素的子元素是否存在的示例代码
2014/02/04 Javascript
JS生成不重复随机数组的函数代码
2014/06/10 Javascript
js实现发送验证码后的倒计时功能
2015/05/28 Javascript
jQuery File Upload文件上传插件使用详解
2016/12/06 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
优秀大学生的自我评价
2014/01/16 职场文书
2014年教师政治学习材料
2014/06/02 职场文书
授权收款委托书
2014/09/23 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
罗马假日观后感
2015/06/08 职场文书
幼儿园大班教育随笔
2015/08/14 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
日本官方排名前10的动漫,名侦探柯南上榜,第一是一部创造历史的动漫
2022/03/18 日漫