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 相关文章推荐
Python3.x中自定义比较函数
Apr 24 Python
python自动裁剪图像代码分享
Nov 25 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
Jan 04 Python
python用for循环求和的方法总结
Jul 08 Python
python并发编程多进程 互斥锁原理解析
Aug 20 Python
python装饰器练习题及答案
Nov 01 Python
django框架auth模块用法实例详解
Dec 10 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
Mar 10 Python
python+adb+monkey实现Rom稳定性测试详解
Apr 23 Python
PyInstaller运行原理及常用操作详解
Jun 13 Python
Python如何给你的程序做性能测试
Jul 29 Python
基于flask实现五子棋小游戏
May 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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
ajax+php打造进度条 readyState各状态
2010/03/20 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
又一个小巧的图片预加载类
2007/05/05 Javascript
两个DIV等高的JS的实现代码
2007/12/23 Javascript
jQuery UI AutoComplete 使用说明
2011/06/20 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
JavaScript面向对象(极简主义法minimalist approach)
2012/07/17 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
2014/08/06 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
基于JS实现EOS隐藏错误提示层代码
2016/04/25 Javascript
leaflet的开发入门教程
2016/11/17 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
利用soaplib搭建webservice详细步骤和实例代码
2013/11/20 Python
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
python常用运维脚本实例小结
2020/02/14 Python
学院书画协会部门职责
2013/11/28 职场文书
经营理念标语
2014/06/21 职场文书
教师学期末个人总结
2015/02/13 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
Javascript中Microtask和Macrotask鲜为人知的知识点
2022/04/02 Javascript
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL