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 RuntimeError: thread.__init__() not called解决方法
Apr 28 Python
Python Socket实现简单TCP Server/client功能示例
Aug 05 Python
在Python中表示一个对象的方法
Jun 25 Python
Python实现制度转换(货币,温度,长度)
Jul 14 Python
python3 批量获取对应端口服务的实例
Jul 25 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
用Python实现校园通知更新提醒功能
Nov 23 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
Apr 08 Python
Python如何根据时间序列数据作图
May 12 Python
解决tensorflow/keras时出现数组维度不匹配问题
Jun 29 Python
基于python定位棋子位置及识别棋子颜色
Jul 26 Python
Python之matplotlib绘制折线图
Apr 13 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实现WEB动态网页静态
2006/10/09 PHP
php 移除数组重复元素的一点说明
2008/11/27 PHP
php 数组的合并、拆分、区别取值函数集
2010/02/15 PHP
PHP的autoload机制的实现解析
2012/09/15 PHP
使用php实现网站验证码功能【推荐】
2017/02/09 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
Extjs入门之动态加载树代码
2010/04/09 Javascript
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
2017/03/10 Javascript
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
详解iview的checkbox多选框全选时校验问题
2019/06/10 Javascript
如何利用nodejs实现命令行游戏
2020/11/24 NodeJs
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
[01:50]2014DOTA2西雅图邀请赛 专访欢乐周宝龙
2014/07/08 DOTA
Python struct.unpack
2008/09/06 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
python实现数据导出到excel的示例--普通格式
2018/05/03 Python
使用 Python 清理收藏夹里已失效的网站
2019/12/03 Python
django models里数据表插入数据id自增操作
2020/07/15 Python
Python创建文件夹与文件的快捷方法
2020/12/08 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
土耳其时尚潮流在线购物网站:Trendyol
2017/10/10 全球购物
俄罗斯马克西多姆家居用品网上商店:Максидом
2020/02/06 全球购物
药店主任岗位责任制
2014/02/10 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
法制宣传标语
2014/06/23 职场文书
2015年六一儿童节演讲稿
2015/03/19 职场文书
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript