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实现按学生年龄排序的实际问题详解
Aug 29 Python
Python探索之pLSA实现代码
Oct 25 Python
使用django-crontab实现定时任务的示例
Feb 26 Python
基于Python pip用国内镜像下载的方法
Jun 12 Python
python3 拼接字符串的7种方法
Sep 12 Python
使用Python实现租车计费系统的两种方法
Sep 29 Python
python文件选择对话框的操作方法
Jun 27 Python
50行Python代码获取高考志愿信息的实现方法
Jul 23 Python
Django命名URL和反向解析URL实现解析
Aug 09 Python
使用Bazel编译TensorBoard教程
Feb 15 Python
Python数据分析之pandas读取数据
Jun 02 Python
Python实现GIF动图以及视频卡通化详解
Dec 06 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
深入密码加salt原理的分析
2013/06/06 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
php简单统计中文个数的方法
2016/09/30 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
2015/01/09 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
Python版实现微信公众号扫码登陆
2020/05/28 Javascript
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
python实现每次处理一个字符的三种方法
2014/10/09 Python
Python处理字符串之isspace()方法的使用
2015/05/19 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
在Python中调用Ping命令,批量IP的方法
2019/01/26 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
Python3 集合set入门基础
2020/02/10 Python
python能做哪方面的工作
2020/06/15 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
用Python自动清理系统垃圾的实现
2021/01/18 Python
css3的动画特效之动画序列(animation)
2017/12/22 HTML / CSS
为什么会有内存对齐
2016/10/10 面试题
RIP版本1跟版本2的区别
2013/12/30 面试题
创立科技Java面试题
2015/11/29 面试题
公司财务总监岗位职责
2013/12/14 职场文书
公司总经理助理岗位职责
2014/07/09 职场文书
团代会开幕词
2015/01/28 职场文书
Pytorch中TensorBoard及torchsummary的使用详解
2021/05/12 Python