wxPython實現繪圖小例子
阿新 • • 發佈:2020-01-09
本文例項為大家分享了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,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.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,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,wx.SOLID) def SetThickness(self,num): self.thickness = num self.pen = wx.Pen(self.color,wx.SOLID) class PaintFrame(wx.Frame): def __init__(self,parent): wx.Frame.__init__(self,-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()
測試:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。