- wxPython 教程
- wxPython - 首页
- wxPython - 简介
- wxPython - 环境配置
- wxPython - Hello World
- wxPython - GUI 构建工具
- wxPython - 主要类
- wxPython - 事件处理
- wxPython - 布局管理
- wxPython - 按钮
- wxPython - 可停靠窗口
- 多文档界面 (Multiple Document Interface)
- wxPython 绘图 API
- wxPython - 拖放
- wxPython 资源
- wxPython - 快速指南
- wxPython - 有用资源
- wxPython - 讨论
wxPython 绘图 API
GDI+(图形设备接口)、CoreGraphics 和 Cairo 库构成了 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() 在指定位置显示给定文本 |
示例
以下示例实现了上述函数,并使用了画笔、画刷、颜色和字体对象。
完整代码如下:
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()
以上代码产生以下输出: