wxPython - 绘图 API


GDI +(图形绘图接口)、CoreGraphicsCairo 库构成了 wxPython 中绘图 API 的框架。wx.GraphicsContext 是主要的可绘制对象,使用它创建各种设备上下文对象。

wx.DC是一个抽象类。其派生类用于在不同设备上呈现图形和文本。设备上下文类是 -

  • wx.ScreenDC - 使用它在屏幕上绘画,而不是在单个窗口上。

  • wx.ClientDC - 使用它在窗口的客户区域(没有边框和其他装饰的部分)上绘制,但不要在 wxPaintEvent 中使用它。

  • wx.PaintDC - 使用它在窗口的客户区域上绘制,但只能在 wxPaintEvent 内进行。

  • wx.WindowDC - 使用它在窗口的整个区域上绘画,包括装饰。这在非 Windows 平台上可能不可用。

wxPython的绘图API提供了不同的函数来绘制形状、文本和图像。绘图所需的对象,例如 Color、Pen、Brush 和 Font,也可以使用 GDI 类来构造。

wx.颜色类别

颜色对象表示 RGB(红色、绿色和蓝色)强度值的组合,每个强度值的范围为 0-255。有一些预定义的颜色对象,例如 -

  • 黑色
  • 青色
  • wx绿色
  • wx黄色
  • wxLIGHT_GREY
  • 红红
  • 白色

具有自定义 RGB 值组合的颜色形成为wx.Colour 对象

wx.Colour(r,g,b)

wx.Pen类

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.透明

wx.画笔类

画笔是填充矩形、椭圆形、圆形等形状背景所需的另一种基本图形对象。

自定义Brush对象需要wx.Colour和Brush样式参数。以下是预定义画笔样式的列表 -

wx.SOLID
wx.点画
wx.BDIAGONAL_HATCH
wx.CROSSDIAG_HATCH
wx.FDIAGONAL_HATCH
wx.CROSS_HATCH
wx.HORIZONTAL_HATCH
wx.VERTICAL_HATCH
wx.透明

wxPython 有许多函数可以方便地绘制不同的形状、文本和图像。

序列号 功能及说明
1

绘制矩形()

绘制给定尺寸的矩形

2

画圆()

以给定点为圆心和半径绘制圆

3

绘制椭圆()

以给定的 x 和 y 半径绘制椭圆

4

画线()

在两个 wx.Point 对象之间绘制一条线

5

绘制位图()

在给定位置绘制图像

6

绘制文本()

在指定位置显示给定文本

例子

上述功能在下面的示例中使用 Pen、Brush、Color 和 Font 对象来实现。

完整代码如下 -

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()

上面的代码产生以下输出 -

绘图演示