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实现根据主机名字获得所有ip地址的方法
Jun 28 Python
Python中time模块与datetime模块在使用中的不同之处
Nov 24 Python
python批量制作雷达图的实现方法
Jul 26 Python
Python利用Beautiful Soup模块修改内容方法示例
Mar 27 Python
Python2.7下安装Scrapy框架步骤教程
Dec 22 Python
Python产生Gnuplot绘图数据的方法
Nov 09 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
Jan 15 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
Aug 29 Python
python 检查数据中是否有缺失值,删除缺失值的方式
Dec 02 Python
关于tf.TFRecordReader()函数的用法解析
Feb 17 Python
什么是Python装饰器?如何定义和使用?
Apr 11 Python
python运行脚本文件的三种方法实例
Jun 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
PHP调用三种数据库的方法(3)
2006/10/09 PHP
社区(php&&mysql)二
2006/10/09 PHP
用PHP将网址字符串转换成超链接(网址或email)
2010/05/25 PHP
php header示例代码(推荐)
2010/09/08 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
javascript URL锚点取值方法
2009/02/25 Javascript
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
常见的javascript跨域通信方法
2015/12/31 Javascript
jQuery插件zTree实现获取一级节点数据的方法
2017/03/08 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
iview日期控件,双向绑定日期格式的方法
2018/03/15 Javascript
详解封装基础的angular4的request请求方法
2018/06/05 Javascript
python实现代理服务功能实例
2013/11/15 Python
Python实现文件复制删除
2016/04/19 Python
Python+Django搭建自己的blog网站
2018/03/13 Python
python实现扫描日志关键字的示例
2018/04/28 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
2020/07/13 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
银行办理业务介绍信
2014/01/18 职场文书
售后服务经理岗位职责
2014/02/25 职场文书
社区禁毒工作方案
2014/06/02 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
职代会闭幕词
2015/01/28 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
加班费申请报告
2015/05/15 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
接触艺术对孩子学习思维有益
2019/08/06 职场文书
python字典进行运算原理及实例分享
2021/08/02 Python
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android
Docker容器harbor私有仓库部署和管理
2022/08/05 Servers