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中的一些类型转换函数小结
Feb 10 Python
python实现无证书加密解密实例
Oct 27 Python
python中sleep函数用法实例分析
Apr 29 Python
python清除字符串里非数字字符的方法
Jul 02 Python
Python Json模块中dumps、loads、dump、load函数介绍
May 15 Python
Python使用分布式锁的代码演示示例
Jul 30 Python
python 简单照相机调用系统摄像头实现方法 pygame
Aug 03 Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 Python
如何在django中实现分页功能
Apr 22 Python
django 数据库返回queryset实现封装为字典
May 19 Python
详解Open Folder as PyCharm Project怎么添加的方法
Dec 29 Python
Python OpenCV形态学运算示例详解
Apr 07 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 array_slice函数的使用以及参数详解
2008/08/30 PHP
实例讲解PHP面向对象之多态
2014/08/20 PHP
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
jquery解析XML字符串和XML文件的方法说明
2014/02/21 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
2016/06/21 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
原生JS实现图片轮播与淡入效果的简单实例
2016/08/21 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
2020/12/02 Vue.js
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
Python里disconnect UDP套接字的方法
2015/04/23 Python
python使用socket进行简单网络连接的方法
2015/04/29 Python
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
Python Flask-web表单使用详解
2017/11/18 Python
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
Python生成器以及应用实例解析
2018/02/08 Python
python中import与from方法总结(推荐)
2019/03/21 Python
Python向excel中写入数据的方法
2019/05/05 Python
Python 分发包中添加额外文件的方法
2019/08/16 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
Python正则表达式如何匹配中文
2020/05/27 Python
Python request中文乱码问题解决方案
2020/09/17 Python
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
当我正在为表建立索引的时候,SQL Server 会禁止对表的访问吗
2014/04/28 面试题
学术会议主持词
2014/03/17 职场文书
三八妇女节新闻稿
2015/07/17 职场文书
新手初学Java List 接口
2021/07/07 Java/Android
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫
vue css 相对路径导入问题级踩坑记录
2022/06/05 Vue.js
nginx代理实现静态资源访问的示例代码
2022/07/07 Servers