wxPython - 绘图 API
GDI+ (Graphics Drawing Interface)、CoreGraphics和Cairo库构成了wxPython中绘图API的框架。 wx.GraphicsContext 是主要的可绘制对象,使用它创建各种设备上下文对象。
wx.DC是一个抽象类。 它的派生类用于在不同的设备上呈现图形和文本。 设备上下文类是 −
wx.ScreenDC − 使用它在屏幕上绘画,而不是在单个窗口上绘画。
wx.ClientDC − 使用它来绘制窗口的客户区(没有边框和其他装饰的部分),但不要在 wxPaintEvent 中使用它。
wx.PaintDC − 使用它在窗口的客户区上绘制,但仅来自 wxPaintEvent 中。
wx.WindowDC − 用它在窗户的整个区域上绘画,包括装饰品。 这可能不适用于非 Windows 平台。
wxPython的绘图API提供了不同的函数来绘制形状、文本和图像。 绘图所需的对象,如 Colour、Pen、Brush 和 Font,也可以使用 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 对象决定线条、矩形、圆形等图形的颜色、宽度和样式。
预定义的 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 |
预定义的 Pen 样式是 −
wx.SOLID |
wx.DOT |
wx.LONG_DASH |
wx.SHORT_DASH |
wx.DOT_DASH |
wx.TRANSPARENT |
wx.Brush 类
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.TRANSPARENT |
wxPython 有许多函数可以方便地绘制不同的形状、文本和图像。
S.N. | 函数 & 描述 |
---|---|
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()
以上代码产生如下输出 −
![绘图演示](https://www.w3ccoo.com/wxpython/images/drawing_demo.jpg)