侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

wxPython实现画图板

Python  /  管理员 发布于 7年前   210

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

#coding:GBK'''Created on 2012-3-22@author: cWX53049'''import wximport timefrom bsddb.test.test_pickle import cPickleimport 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() 

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


  • 上一条:
    python 如何去除字符串头尾的多余符号
    下一条:
    Python 私有化操作实例分析
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客