wxPython实现画图板


Posted in Python onAugust 27, 2020

本文实例为大家分享了wxPython画图板展示的具体代码,供大家参考,具体内容如下

#coding:GBK
'''
Created on 2012-3-22
@author: cWX53049
'''
import wx
import time
from bsddb.test.test_pickle import cPickle
import os
 
_formatStr="%Y-%m-%d %H:%M:%S"
 
class SkethWindow(wx.Window):
 
 
 def __init__(self,parent,ID):
  wx.Window.__init__(self,parent,ID)
  self.SetBackgroundColour("White")
  self.color="Black"
  self.thickness=1
  self.pen=wx.Pen(self.color,self.thickness,wx.SOLID)#创建一个pen
  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_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#处理一个resize事件
 def OnIdle(self,event):
  if self.reInitBuffer:
   self.InitBuffer()
   self.Refresh()
 def OnPaint(self,event):
  wx.BufferedPaintDC(self,self.buffer)
 def DrawLines(self,dc):
  for colur,thickness,line in self.lines:
   pen = wx.Pen(colur,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 SkethFrame(wx.Frame):
 def __init__(self,parent):
  self.title="绘画窗体"
  wx.Frame.__init__(self,parent,-1,self.title,size=(500,500))
  self.sketh=SkethWindow(self,-1)
  self.InitStatusBar()
  self.sketh.Bind(wx.EVT_MOTION, self.showPosition)
  self.initMenuBar()
  self.wildcard="Sketch file(*.sketch)|All files(*.*)|*.*"
  self.fileName=""
  
 def OnNew(self,event):
  pass
 def OnOpen(self,event):
  pass
 def OnSave(self,event):
  if not self.fileName:
   self.OnSaveAs(event)
  else:
   self.SaveFile()
   
 def SaveFile(self):
  if self.fileName:
   data = self.sketh.GetLinesData()
   f = open(self.fileName,'w') 
   cPickle.dump(data, f)
   f.close()
 def OnSaveAs(self,event):
  dlf = wx.FileDialog(self,"Sketch file",os.getcwd(),style=wx.SAVE|wx.OVERWRITE_PROMPT)
  if dlf.ShowModal()==wx.ID_OK:
   fileName = dlf.GetPath()
   if not os.path.splitext(fileName)[1]:
    fileName=fileName+'.sketch'
    self.fileName=fileName 
    self.SaveFile()
  self.SetTitle(self.title+'--'+self.fileName)
  dlf.Destroy()      
 def OnColor(self,event):
  pass
 def OnCloseWindow(self,event):
  self.Destroy() 
 def menuData(self):
  return [("&File",(
     ("&New","New Sketch file",self.OnNew),
     ("&Open","open sketch file",self.OnOpen),
     ("&Save","save sktech file",self.OnSave),
     ("","",""),
     ("&Color",(
     ("&Black","",self.OnColor,wx.ITEM_RADIO),
     ("&Red","",self.OnColor,wx.ITEM_RADIO),
     ("&Red","",self.OnColor,wx.ITEM_RADIO),
     ("&Blue","",self.OnColor,wx.ITEM_RADIO))),
     ("","",""),
     ("&Quit","quit sketch ",self.OnCloseWindow)))] 
 
 def initMenuBar(self):
  menuBar=wx.MenuBar()
  for eachMenu in self.menuData():
   eachMenuLabel = eachMenu[0]
   eachMenuItems = eachMenu[1]
   menuBar.Append(self.createMenu(eachMenuItems),eachMenuLabel)
  self.SetMenuBar(menuBar)  
  
 def createMenu(self,menuData):
  menu = wx.Menu()
  for eachMenu in menuData:
   if len(eachMenu)==2:
    label = eachMenu[0]
    subBar =self.createMenu(eachMenu[1]) 
    menu.AppendMenu(wx.NewId(),label,subBar)
   else:
    self.createMenuItem(menu,*eachMenu)
  return menu
 
 def createMenuItem(self,menu,label,status,handler,kind=wx.ITEM_NORMAL):
  if not label:
   menu.AppendSeparator()
   return
  menuItem=menu.Append(-1,label,status,kind)
  self.Bind(wx.EVT_MENU,handler,menuItem)  
   
   
 def InitStatusBar(self):
  self.statusBar=self.CreateStatusBar()
  self.statusBar.SetFieldsCount(4)
  self.statusBar.SetStatusWidths([-1,-2,-2,-2])
  self.timer=wx.Timer(self)
  self.Bind(wx.EVT_TIMER, self.updateTime, self.timer)
  self.timer.Start(1000)
  self.statusBar.SetStatusText("Time is %s"%time.strftime(_formatStr,time.localtime()),3)
  self.statusBar.SetStatusText("Pos (0,0)",1)
  self.statusBar.SetStatusText("Cur Line 0",2)
  self.statusBar.SetStatusText("Lines 0" ,3)
  
  
 def showPosition(self,event):
  self.statusBar.SetStatusText("Pos %s"%str(event.GetPositionTuple()),0)
  self.statusBar.SetStatusText("Cur Line %s"%len(self.sketh.curLine),1)
  self.statusBar.SetStatusText("Lines %s"%len(self.sketh.lines),2)
  event.Skip() 
   
 def updateTime(self,event):
  self.statusBar.SetStatusText("Time is %s"%time.strftime(_formatStr,time.localtime()),3)
   
   
if __name__=="__main__":
 app = wx.PySimpleApp(False)
 frame=SkethFrame(None)
 frame.Center()
 frame.Show(True)
 app.MainLoop()

wxPython实现画图板

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 多线程应用介绍
Dec 19 Python
详解python3中socket套接字的编码问题解决
Jul 01 Python
Python实现字典的遍历与排序功能示例
Dec 23 Python
python配置grpc环境
Jan 01 Python
Python实现合并excel表格的方法分析
Apr 13 Python
python使用celery实现异步任务执行的例子
Aug 28 Python
python计算波峰波谷值的方法(极值点)
Feb 18 Python
python 画图 图例自由定义方式
Apr 17 Python
Python Selenium自动化获取页面信息的方法
Aug 31 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
Dec 31 Python
python 制作网站小说下载器
Feb 20 Python
Python超详细分步解析随机漫步
Mar 17 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
Python高级property属性用法实例分析
Nov 19 #Python
wxPython之wx.DC绘制形状
Nov 19 #Python
You might like
php中的实现trim函数代码
2007/03/19 PHP
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
2010/06/04 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
用JavaScript获取网页中的js、css、Flash等文件
2006/12/20 Javascript
javascript full screen 全屏显示页面元素的方法
2013/09/27 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
2013/11/28 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
nodejs中sleep功能实现暂停几秒的方法
2017/07/12 NodeJs
Vue动态组件实例解析
2017/08/20 Javascript
详解webpack3如何正确引用并使用jQuery库
2017/08/26 jQuery
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
微信小程序点击生成朋友圈分享图(遇到的坑)
2020/06/17 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
Python脚本实现网卡流量监控
2015/02/14 Python
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
Django Admin 实现外键过滤的方法
2017/09/29 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
python决策树之CART分类回归树详解
2017/12/20 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
python实现接口并发测试脚本
2019/06/25 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
PIL包中Image模块的convert()函数的具体使用
2020/02/26 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
会计的岗位职责
2014/03/15 职场文书
卫生巾广告词
2014/03/18 职场文书
三八妇女节演讲稿
2014/05/27 职场文书
商务宴会祝酒词
2015/08/11 职场文书
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python