Wxpython 简明教程

wxPython - Drawing API

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

wx.DC 是一个抽象类。它的派生类用于在不同设备上渲染图形和文本。设备上下文类为 -

  1. wx.ScreenDC - 使用此类在屏幕上作画,而不是在单个窗口上作画。

  2. wx.ClientDC - 使用此类在窗口的客户端区域(没有边框和其他装饰的部分)作画,但不要在 wxPaintEvent 内使用它。

  3. wx.PaintDC - 使用此类在窗口的客户端区域作画,但只能在 wxPaintEvent 内使用。

  4. wx.WindowDC - 使用此类在窗口的整个区域作画,包括装饰。在非 Windows 平台上可能不可用。

wxPython 绘图 API 提供用于绘制形状、文本和图像的不同函数。用于绘制目的的对象(比如颜色、笔、画笔和字体)也可以使用 GDI 类进行构建。

wx.Colour Class

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

  1. wxBLACK

  2. wxBLUE

  3. wxCYAN

  4. wxGREEN

  5. wxYELLOW

  6. wxLIGHT_GREY

  7. wxRED

  8. wxWHITE

以 RGB 值自定义组合形成颜色 为 wx.Colour object

wx.Colour(r,g,b)

wx.Pen Class

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.TRANSPARENT

wx.Brush Class

Brush 是另一个基本图形对象,用于填充矩形、椭圆、圆形等形状的背景。

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

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.

Functions & Description

1

DrawRectangle() 绘制给定尺寸的矩形

2

DrawCircle() 在给定点以中心和半径绘制圆形

3

DrawEllipse() 使用给定的 x 和 y 半径绘制椭圆

4

DrawLine() 在两个 wx.Point 对象之间绘制线

5

DrawBitmap() 在给定位置绘制图像

6

DrawText() 在指定位置显示给定文本

Example

上述函数在以下示例中实现,利用了 Pen、Brush、Colour 和 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()

上述代码生成以下输出 -

drawing demo