wxPython繪圖API


GDI+(圖形繪製介面),CoreGraphics和Cairo庫形成wxPython繪圖API的框架。wx.GraphicsContext是主要繪製物件,使用它來建立各種裝置上下文物件。

wx.DC是一個抽象類。它的派生類用於渲染的圖形和文字在不同的裝置。關聯裝置類 -
  • wx.ScreenDC ? 使用它描繪在螢幕上,而不是一個單獨的視窗。

  • wx.ClientDC ? 使用它描繪在視窗(無邊框等裝飾的一部分)的客戶區域,但不從wxPaintEvent內使用它。

  • wx.PaintDC ? 使用它描繪在視窗的客戶區域,但只能從wxPaintEvent內。

  • wx.WindowDC ? 使用它描繪的視窗,包括裝飾的整個區域。這可能不提供對非Windows平台。

wxPython中的繪圖API提供不同的功能繪製形狀,文字和影象。需要繪製用途,如顏色,畫筆,刷子和字型的物件也可以使用GDI類構造。

wx.Colour類

顏色物件表示RGB(紅,綠和藍)的亮度值,每個是在0-255的比例組合。還有一些預定義的顏色物件-

  • wxBLACK
  • wxBLUE
  • wxCYAN
  • wxGREEN
  • wxYELLOW
  • wxLIGHT_GREY
  • wxRED
  • wxWHITE
顏色以RGB值自定義組合形成為wx.Colour物件。
wx.Colour(r,g,b)

wx.Pen類

Pen物件確定的圖形像線,矩形,圓等的形狀的顏色,寬度和樣式
預定義的畫筆物件是-
wxBLACK_DASHED_PEN
wxBLACK_PEN
wxBLUE_PEN
wxCYAN_PEN
wxGREEN_PEN
wxYELLOW_PEN
wxGREY_PEN
wxLIGHT_GREY_PEN
wxMEDIUM_GREY_PEN
wxRED_PEN
wxTRANSPARENT_PEN
wxWHITE_PEN
預定義的畫筆樣式是 -
wx.SOLID
wx.DOT
wx.LONG_DASH
wx.SHORT_DASH
wx.DOT_DASH
wx.TRANSPARENT

wx.Brush 類

Brush是另一個基本圖形物件必須填寫的形狀,如矩形,橢圓形,圓形等的背景
自定義畫筆物件需要wx.Colour和畫筆的樣式引數。以下是預定義的刷樣式列表 -
wx.SOLID
wx.STIPPLE
wx.BDIAGONAL_HATCH
wx.CROSSDIAG_HATCH
wx.FDIAGONAL_HATCH
wx.CROSS_HATCH
wx.HORIZONTAL_HATCH
wx.VERTICAL_HATCH
wx.TRANSPARENT
wxPython有許多便於繪製不同的形狀,文字和影象的函式。
S.N.
函式與說明
1

DrawRectangle()

按給定尺寸繪製矩形
2

DrawCircle()

用給定的點為中心以及半徑繪製一個圓
3

DrawEllipse()

用給定的x和y半徑繪製一個橢圓
4

DrawLine()

繪製兩個wx.Point物件之間的線
5

DrawBitmap()

在給定的位置繪製影象
6

DrawText()

顯示在指定的位置給定的文字

範例

上述函式是在下面的例子中實現的,利用畫筆,畫筆,顏色和字型的物件。
完整的程式碼如下 -
import wx 
 
class Mywin(wx.Frame): 
            
   def __init__(self, parent, title): 
      super(Mywin, self).__init__(parent, title = title,size = (500,300))  
      self.InitUI() 
         
   def InitUI(self): 
      self.Bind(wx.EVT_PAINT, self.OnPaint) 
      self.Centre() 
      self.Show(True)
		
   def OnPaint(self, e): 
      dc = wx.PaintDC(self) 
      brush = wx.Brush("white")  
      dc.SetBackground(brush)  
      dc.Clear() 
        
      dc.DrawBitmap(wx.Bitmap("python.jpg"),10,10,True) 
      color = wx.Colour(255,0,0)
      b = wx.Brush(color) 
		
      dc.SetBrush(b) 
      dc.DrawCircle(300,125,50) 
      dc.SetBrush(wx.Brush(wx.Colour(255,255,255))) 
      dc.DrawCircle(300,125,30) 
		
      font = wx.Font(18, wx.ROMAN, wx.ITALIC, wx.NORMAL) 
      dc.SetFont(font) 
      dc.DrawText("Hello wxPython",200,10) 
		
      pen = wx.Pen(wx.Colour(0,0,255)) 
      dc.SetPen(pen) 
      dc.DrawLine(200,50,350,50) 
      dc.SetBrush(wx.Brush(wx.Colour(0,255,0), wx.CROSS_HATCH)) 
      dc.DrawRectangle(380, 15, 90, 60) 
		
ex = wx.App() 
Mywin(None,'Drawing Demo - www.tw511.com') 
ex.MainLoop()

上面的程式碼產生下面的輸出 -