wxPython實(shí)現(xiàn)畫(huà)圖板
本文實(shí)例為大家分享了wxPython畫(huà)圖板展示的具體代碼,供大家參考,具體內(nèi)容如下
#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)#創(chuàng)建一個(gè)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()#得到鼠標(biāo)的位置
self.CaptureMouse()#捕獲鼠標(biāo)
def OnLeftUp(self,event):
if self.HasCapture():
self.lines.append((self.color,
self.thickness,
self.curLine))
self.curLine=[]
self.ReleaseMouse()#釋放鼠標(biāo)
def OnMotion(self,event):
if event.Dragging() and event.LeftIsDown():#確定是否在拖動(dòng)
dc = wx.BufferedDC(wx.ClientDC(self),self.buffer)#創(chuàng)建另一個(gè)
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#處理一個(gè)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="繪畫(huà)窗體"
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()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解pytest實(shí)現(xiàn)mark標(biāo)記功能詳細(xì)介紹
這篇文章主要介紹了詳解pytest實(shí)現(xiàn)mark標(biāo)記功能詳細(xì)介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
分享11個(gè)Python自動(dòng)化操作Excel的方法
這篇文章主要給大家分享的是11個(gè)Python自動(dòng)化操作Excel的方法,自動(dòng)化辦公,我相信很多人都有強(qiáng)烈的需求,今天我教大家如何利用Python自動(dòng)化操作Excel,需要的朋友可以參考一下2022-02-02
python繪制規(guī)則網(wǎng)絡(luò)圖形實(shí)例
今天小編大家分享一篇python繪制規(guī)則網(wǎng)絡(luò)圖形實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
使用Python實(shí)現(xiàn)視頻封面批量下載器
在視頻網(wǎng)站上,每個(gè)視頻都有一個(gè)獨(dú)特的封面圖像,本文主要為大家詳細(xì)如何使用Python編寫(xiě)一個(gè)視頻封面批量下載器,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
詳解TensorFlow在windows上安裝與簡(jiǎn)單示例
這篇文章主要介紹了詳解TensorFlow在windows上安裝與簡(jiǎn)單示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
Python使用py2neo操作圖數(shù)據(jù)庫(kù)neo4j的方法詳解
這篇文章主要介紹了Python使用py2neo操作圖數(shù)據(jù)庫(kù)neo4j的方法,結(jié)合實(shí)例形式詳細(xì)分析了Python使用py2neo操作圖數(shù)據(jù)庫(kù)neo4j的具體步驟、原理、相關(guān)使用技巧與操作注意事項(xiàng),需要的朋友可以參考下2020-01-01
超詳細(xì)注釋之OpenCV操作圖像平移轉(zhuǎn)換
這篇文章主要介紹了OpenCV操作圖像平移轉(zhuǎn)換,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09

