wxpython之DC繪圖

一般來說,系統與繪圖程序之間的信息交換是由圖形設備接口(Graphics Device Interface,GDI)實現的,在wxpython中,通過device context(DC)對象來實現GDI的功能。

DC對象的創建非常簡單,只需引用wx.PaintDC即可,而後則可通過dc來設置畫筆dc.SetPen,有了畫筆,就可以進行圖形繪製了。於是,我們再考慮到圖形的屬性,包括形狀、顏色與邊框等,更細緻地說,是圖形形狀、填充顏色、邊框類型、邊框顏色。

我們可以通過一個矩形的例子來說明:

在這裏插入圖片描述
上面的窗口由如下代碼實現。

import wx
class Example(wx.Frame):
    def __init__(self, parent,title):
        super(Example,self).__init__(parent,title=title,size=(350,280))
        self.Bind(wx.EVT_PAINT, self.OnShowColour)
        self.Center()   #居中
        self.Show()     #顯示

    def OnShowColour(self,evt):
        dc = wx.PaintDC(self)
        dc.SetPen(wx.Pen('#d4d4d4'))    #設置畫筆顏色

        dc.SetBrush(wx.Brush('#c56c00'))#設置填充顏色
        dc.DrawRectangle(10,15,90,60)   #繪製矩形

        dc.SetBrush(wx.Brush('#1ac500'))
        dc.DrawRectangle(130,15,90,60)

        dc.SetBrush(wx.Brush('#539e47'))
        dc.DrawRectangle(250,15,90,60)

        dc.SetBrush(wx.Brush('#004fc5'))
        dc.DrawRectangle(10,105,90,60)

def test():
    app = wx.App()		#創建App對象
    Example(None,'Rect')#創建繪圖窗口
    app.MainLoop()

if __name__ == "__main__":
    test()

首先,通過dc.SetPen()設置畫筆屬性,wx.Pen('#d4d4d4')的標準調用格式爲wx.Pen(wx.Colour,width,style),width顧名思義即爲畫筆寬度,’#d4d4d4’是Colour類的一種表示,爲紅、綠、藍三組十六進制值的組合,從而定義畫筆顏色。除了字符串的表示方法之外,還可以通過引用標準顏色庫或者調用wx.Colour()來對顏色進行定義。

例如,wx.Colour(255,0,0),‘Red’和’#FF0000’都表示紅色。標準顏色庫如表所示:

AQUAMARINE BLACK BLUE BLUE VIOLET BROWN
CADET BLUE CORAL CORNFLOWER BLUE CYAN DARK GREY
DARK GREEN DARK OLIVE GREEN DARK ORCHID DARK SLATE BLUE DARK SLATE GREY
DARK TURQUOISE DIM GREY FIREBRICK FOREST GREEN GOLD
GOLDENROD GREY GREEN GREEN YELLOW INDIAN RED
KHAKI LIGHT BLUE LIGHT GREY LIGHT STEEL BLUE LIME GREEN
MAGENTA MAROON MEDIUM AQUAMARINE MEDIUM BLUE MEDIUM FOREST GREEN
MEDIUM GOLDENROD MEDIUM ORCHID MEDIUM SEA GREEN MEDIUM SLATE BLUE MEDIUM SPRING GREEN
MEDIUM TURQUOISE MEDIUM VIOLET RED MIDNIGHT BLUE NAVY ORANGE
ORANGE RED ORCHID PALE GREEN PINK PLUM
PURPLE RED SALMON SEA GREEN SIENNA
SKY BLUE SLATE BLUE SPRING GREEN STEEL BLUE TAN
THISTLE TURQUOISE VIOLET VIOLET RED WHEAT
WHITE YELLOW YELLOW GREEN

除了顏色之外,SetPen中還可以定義其他屬性,例如畫筆樣式:

  • wx.SOLID:實線
  • wx.DOT:點線
  • wx.LONG_DASH:長橫線
  • wx.SHORT_DASH:短橫線
  • wx.DOT_DASH:點橫線
  • wx.TRANSPARENT:無邊框

dc.SetBrush爲設置筆刷,即圖形內部填充,除了wx.Colour()之外,其style包括以下類型

  • wx.SOLID:實心填充
  • wx.BDIAGONAL_HATCH:右斜紋
  • wx.CROSSDIAG_HATCH:左斜紋
  • wx.FDIAGONAL_HATCH:斜交叉紋
  • wx.CROSS_HATCH:橫豎交叉紋
  • wx.HORIZONTAL_HATCH:橫紋
  • wx.VERTICAL_HATCH:縱紋
  • wx.TRANSPARENT:無填充

dc.DrawRectangle爲矩形繪製命令,其中四個參數分別爲左上角點的座標以及長寬值。除了矩形之外,wxpython提供了許多其他的圖形,如表所示

函數 圖形 參數備註
dc.DrawEllipse(x, y, width, height) 橢圓
dc.DrawRoundedRectangle(x, y, width, height, radius) 圓角矩形 radius爲圓角半徑
dc.DrawArc(xStart, yStart, xEnd, yEnd, xc, yc) 圓弧 xc,yc爲圓心
dc.DrawPolygon(points) 多邊形 輸入爲點集
dc.DrawRectangle(x, y, width, height) 矩形
dc.DrawSpline(points) 曲線 輸入爲點集
dc.DrawLines(points) 折線 輸入爲點集
dc.DrawCircle(x, y, radius)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章