在Python裡畫曲線

2021-07-09 08:01:29 字數 4028 閱讀 7504

在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值的變化速度...