一般來說,系統與繪圖程序之間的信息交換是由圖形設備接口(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) | 圓 |