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小程序来统计测试脚本的关键字
Mar 12 Python
详解python中的文件与目录操作
Jul 11 Python
python机器学习之神经网络(一)
Dec 20 Python
python奇偶行分开存储实现代码
Mar 19 Python
Python数据抓取爬虫代理防封IP方法
Dec 23 Python
实例详解Python模块decimal
Jun 26 Python
pycharm中显示CSS提示的知识点总结
Jul 29 Python
python对验证码降噪的实现示例代码
Nov 12 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
Feb 21 Python
Python读写压缩文件的方法
Jul 30 Python
QT5 Designer 打不开的问题及解决方法
Aug 20 Python
python 机器学习的标准化、归一化、正则化、离散化和白化
Apr 16 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的foreach中使用引用时需要注意的一个问题和解决方法
2014/05/29 PHP
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
图片上传即时显示缩略图的js代码
2009/05/27 Javascript
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
使用DNode实现php和nodejs之间通信的简单实例
2015/07/06 NodeJs
JS作为值的函数用法示例
2016/06/20 Javascript
完美实现js选项卡切换效果(一)
2017/03/08 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
2017/07/28 Javascript
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
[01:09:13]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第三场 1月19日
2021/03/11 DOTA
Python中强大的命令行库click入门教程
2016/12/26 Python
使用pytorch完成kaggle猫狗图像识别方式
2020/01/10 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
纽约家具、家居装饰和地毯店:ABC Carpet & Home
2017/06/21 全球购物
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
Java面试题及答案
2012/09/08 面试题
Ibatis如何使用动态表名
2015/07/12 面试题
opencv实现图像几何变换
2021/03/24 Python
入党积极分子介绍信
2014/01/17 职场文书
无毒社区工作方案
2014/05/23 职场文书
2014幼儿园中班工作总结
2014/11/10 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android
Win Server2016远程桌面如何允许多用户同时登录
2022/06/10 Servers