wxPython - 画图 API

  • 简述

    GDI+(图形绘图界面),CoreGraphicsCairo libraries在 wxPython 中形成绘图 API 的框架。wx.GraphicsContext 是主要的可绘制对象,使用它来创建各种设备上下文对象。
    wx.DC 是一个抽象类。其派生类用于在不同设备上呈现图形和文本。设备上下文类是 -
    • wx.ScreenDC- 使用它在屏幕上绘画,而不是单个窗口。
    • wx.ClientDC- 使用它在窗口的客户区域(没有边框和其他装饰的部分)上绘制,但不要在 wxPaintEvent 中使用它。
    • wx.PaintDC- 使用它在窗口的客户区域绘制,但只能在 wxPaintEvent 内绘制。
    • wx.WindowDC− 用它在窗户的整个区域上涂漆,包括装饰品。这在非 Windows 平台上可能不可用。
    wxPython 的绘图 API 提供了绘制形状、文本和图像的不同功能。绘图所需的对象,如颜色、钢笔、画笔和字体也可以使用 GDI 类构建。
  • wx.Color 类

    颜色对象表示 RGB(红色、绿色和蓝色)强度值的组合,每个值的范围为 0-255。有一些预定义的颜色对象,例如 -
    • wxBLACK
    • wxBLUE
    • wxCYAN
    • wxGREEN
    • wxYELLOW
    • wxLIGHT_GREY
    • wxRED
    • wxWHITE
    具有自定义 RGB 值组合的颜色形成为wx.Colour object.
    
    wx.Colour(r,g,b)
    
  • wx.Pen 类

    Pen 对象决定线条、矩形、圆形等图形形状的颜色、宽度和样式。
    Predefined Pen objects是 -
    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
    Predefined Pen styles是 -
    wx.SOLID
    wx.DOT
    wx.LONG_DASH
    wx.SHORT_DASH
    wx.DOT_DASH
    wx.透明
  • wx.Brush 类

    画笔是填充矩形、椭圆、圆形等形状背景所需的另一个基本图形对象。
    自定义 Brush 对象需要 wx.Colour 和 Brush 样式参数。以下是预定义的画笔样式列表 -
    wx.SOLID
    wx.STIPPLE
    wx.BDIAGONAL_HATCH
    wx.CROSSDIAG_HATCH
    wx.FDIAGONAL_HATCH
    wx.CROSS_HATCH
    wx.HORIZONTAL_HATCH
    wx.VERTICAL_HATCH
    wx.透明
    wxPython 有许多函数可以帮助绘制不同的形状、文本和图像。
    序列号 功能与说明
    1
    DrawRectangle()
    绘制给定尺寸的矩形
    2
    DrawCircle()
    在给定点绘制一个圆作为中心和半径
    3
    DrawEllipse()
    用给定的 x 和 y 半径绘制一个椭圆
    4
    DrawLine()
    在两个 wx.Point 对象之间画一条线
    5
    DrawBitmap()
    在给定位置绘制图像
    6
    DrawText()
    在指定位置显示给定文本

    例子

    上述功能在以下示例中实现,使用 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()
    
    上面的代码产生以下输出 -
    绘图演示