Wxpython 简明教程
wxPython - Drawing 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 Class
Color 对象表示 RGB(红、绿和蓝)强度值的组合,每个都在 0-255 的范围内。有一些预定义的颜色对象,例如:
-
wxBLACK
-
wxBLUE
-
wxCYAN
-
wxGREEN
-
wxYELLOW
-
wxLIGHT_GREY
-
wxRED
-
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()
上述代码生成以下输出 -