wxPython 繪圖 API



GDI+(圖形裝置介面)、CoreGraphicsCairo 庫構成了 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 類

畫筆物件決定圖形(如線、矩形、圓等)的形狀、顏色、寬度和樣式。

預定義的畫筆物件包括:

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 類

畫刷是另一個基本圖形物件,用於填充矩形、橢圓、圓等形狀的背景。

自定義畫刷物件需要 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 有許多函式可以方便地繪製不同的形狀、文字和影像。

序號 函式及描述
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') 
ex.MainLoop()

以上程式碼產生以下輸出:

Drawing Demo
廣告