在python裡畫曲線,常常用到wx.dc(裝置上下文)和wx.pen畫筆,有可能需要下面的資源:
wx.buffereddc:用於快取一套繪畫命令,直到命令完整並準備在螢幕上繪畫。這防止了顯示中不必要的閃爍。
wx.bufferedpaintdc:和wx.buffereddc一樣,但是只能用在乙個wx.paintevent的處理中。僅臨時建立該類的例項。
wx.clientdc:用於在乙個視窗物件上繪畫。當你想在視窗部件的主區域上(不包括邊框或別的裝飾)繪畫時使用它。主區域有時也稱為客戶區。wx.clientdc類也應臨時建立。該類僅適用於wx.paintevent的處理之外。
wx.memorydc:用於繪製圖形到記憶體中的乙個點陣圖中,此時不被顯示。然後你可以選擇該位圖,並使用wx.dc.blit()方法來把這個位圖繪畫到乙個視窗中。
wx.metafiledc:在windows作業系統上,wx.metafiledc使你能夠去建立標準視窗圖元檔案資料。
wx.paintdc:等同於wx.clientdc,除了它僅用於乙個wx.paintevent的處理中。僅臨時建立該類的例項。
wx.postscriptdc:用於寫壓縮的postscript檔案。
wx.printerdc:用於windows作業系統上,寫到印表機。
wx.screendc:用於直接在螢幕上繪畫,在任何被顯示的視窗的頂部或外部。該類只應該被臨時建立。
wx.windowdc:用於在乙個視窗物件的整個區域上繪畫,包括邊框以及那些沒有被包括在客戶區域中的裝飾。非windows系統可能不支援該類。
用python繪圖的案例**:
#-*- coding: utf-8 -*-
import wx
class
sketchwindow2
(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) ##建立乙個畫筆物件
self.lines =
self.curlines =
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)
definitbuffer
(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
defgetlinesdata
(self):
return self.lines[:]
defsetlinesdata
(self,lines):
self.lines = lines[:]
self.initbuffer()
self.refresh()
##處理滑鼠按下事件
defonleftdown
(self,event):
self.curlines =
self.pos = event.getpositiontuple()
self.capturemouse() ##捕獲滑鼠
defonleftup
(self,event):
if self.hascapture():
self.thickness,
self.curlines))
self.curlines =
self.releasemouse()
defonmotion
(self,event):
##判斷左鍵是否在拖動
if event.dragging() and event.leftisdown():
dc = wx.buffereddc(wx.clientdc(self),self.buffer) ##建立另乙個緩衝上下文
self.drawmotion(dc,event)
event.skip()
##滑鼠拖動事件
defdrawmotion
(self,dc,event):
dc.setpen(self.pen)
newpos = event.getpositiontuple()
coords = self.pos+newpos
dc.drawline(*coords)
self.pos = newpos
##處理視窗放大事件
defonsize
(self,event):
self.reinitbuffer = true
defonidle
(self,event):
if self.reinitbuffer:
self.initbuffer()
self.refresh(false)
##處理乙個繪畫請求
defonpaint
(self,event):
dc = wx.bufferedpaintdc(self,self.buffer)
##繪製所有的線條
defdrawlines
(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)
defsetcolor
(self,color):
self.color = color
self.pen = wx.pen(self.color,self.thickness,wx.solid)
defsetthickness
(self,num):
self.thickness = num
self.pen = wx.pen(self.color,self.thickness,wx.solid)
class
sketchframe
(wx.frame):
def__init__
(self,parent):
wx.frame.__init__(self,parent,-1,"sketch frame",
size=(800,600))
self.sketch = sketchwindow2(self,-1)
if __name__ == '__main__':
frame = sketchframe(none)
frame.show(true)
效果如下:
圖(1) 用滑鼠左鍵拖曳來畫」hello python」
Qt畫平滑曲線
初學qt繪圖,使用drawling 繪製的直線在兩端點間距離較小時總是出現折點 鋸齒 非常不美觀。後來發現使用qpainter setrenderhint qpainter antialiasing 能消除鋸齒。setrenderhint用於設定呈現樣式,antialiasing是反鋸齒。例 qpa...
IOS開發 畫曲線畫弧線畫圓
1 匯入quartzcore框架 2 自定義乙個view,然後輸入下面的 void drawrect cgrect rect 曲線 void drawarc1 效果如下,參照裡面注釋和圖理解意思 畫曲線是下面兩個函式,效果一直 畫弧線 void drawarc2 畫弧線 如果要畫圓就是上面的enda...
畫驗證曲線 用EV3畫連續曲線的條件
在上一期的推送中,我留下了乙個疑問,樂高小滿老師幫我解惑了,驗證之後問題得到了解決,在此整理分享給大家。疑惑內容 小滿老師的答覆 疑問的內容是 通過描點的方式畫的曲線不連續的原因是什麼?小滿老師的答案是 x值和y值因為存在換算關係,他們的變化速度不一樣,為了保證y值的連續變化,可以減慢x值的變化速度...