wxPython 绘图 API
GDI (图形绘制接口)、 CoreGraphics 和 Cairo libraries 组成了 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() 在指定位置显示给定文本 |
示例
上述功能在以下示例中实现,使用了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()
上面的代码产生以下输出 −