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实现抓取百度搜索结果页的网站标题信息
Jan 22 Python
python中assert用法实例分析
Apr 30 Python
Scrapy的简单使用教程
Oct 24 Python
python 实现求解字符串集的最长公共前缀方法
Jul 20 Python
Python网页正文转换语音文件的操作方法
Dec 09 Python
Python实现定时执行任务的三种方式简单示例
Mar 30 Python
详解python中的模块及包导入
Aug 30 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
Jan 06 Python
python爬虫爬取网页数据并解析数据
Sep 18 Python
Python安装Bs4的多种方法
Nov 28 Python
python树莓派通过队列实现进程交互的程序分析
Jul 04 Python
使用Python开发冰球小游戏
Apr 30 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 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
2010/08/01 PHP
php addslashes 利用递归实现使用反斜线引用字符串
2013/08/05 PHP
php根据用户名和手机号查询是否存在手机号码
2017/02/16 PHP
JavaScript While 循环基础教程
2007/04/05 Javascript
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
Highcharts 非常实用的Javascript统计图demo示例
2013/07/03 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
jQuery使用toggleClass方法动态添加删除Class样式的方法
2015/03/26 Javascript
HTML5 canvas 9绘制图片实例详解
2016/09/06 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
详解NodeJs项目 CentOs linux服务器线上部署
2019/09/16 NodeJs
vue实现倒计时获取验证码效果
2020/04/17 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
python正则表达式之作业计算器
2016/03/18 Python
python 求1-100之间的奇数或者偶数之和的实例
2019/06/11 Python
在python tkinter中Canvas实现进度条显示的方法
2019/06/14 Python
安装Pycharm2019以及配置anconda教程的方法步骤
2019/11/11 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
护士自我鉴定范文
2013/10/06 职场文书
有针对性的求职自荐信
2013/11/14 职场文书
汽车专业人才自我鉴定范文
2013/12/29 职场文书
银行工作检查书范文
2014/01/31 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
高中生学习计划书
2014/09/15 职场文书
给老婆的检讨书
2015/01/27 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python