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的tkinter布局之简单的聊天窗口实现方法
Sep 03 Python
python实现定时播放mp3
Mar 29 Python
Python遍历文件夹和读写文件的实现代码
Aug 28 Python
python 与GO中操作slice,list的方式实例代码
Mar 20 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
python实现生命游戏的示例代码(Game of Life)
Jan 24 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
May 02 Python
pytorch中的transforms模块实例详解
Dec 31 Python
使用darknet框架的imagenet数据分类预训练操作
Jul 07 Python
python中类与对象之间的关系详解
Dec 16 Python
Python import模块的缓存问题解决方案
Jun 02 Python
你喜欢篮球吗?Python实现篮球游戏
Jun 11 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
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
Laravel实现表单提交
2017/05/07 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
JavaScript中几个重要的属性(this、constructor、prototype)介绍
2013/05/19 Javascript
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
2013/06/05 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
JQuery包裹DOM节点的方法
2015/06/11 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
2017/02/09 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
JSON基本语法及与JavaScript的异同实例分析
2019/01/04 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
Python 获得13位unix时间戳的方法
2017/10/20 Python
详解python播放音频的三种方法
2019/09/23 Python
Python列表如何更新值
2020/05/27 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
伦敦一卡通:The London Pass
2018/11/30 全球购物
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
error和exception有什么区别
2012/10/02 面试题
北承题目(C++)
2012/05/16 面试题
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
《再别康桥》教学反思
2014/02/12 职场文书
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
可怜妈妈观后感
2015/06/09 职场文书
公司出差管理制度范本
2015/08/05 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
创业计划书之宠物店
2019/09/19 职场文书