绘图API(Drawing API)
GDI +(图形绘制界面), CoreGraphics和Cairo libraries构成了wxPython中绘制API的框架。 wx.GraphicsContext是主要的可绘制对象,使用它可以创建各种Device Context对象。
wx.DC是一个抽象类。 其派生类用于在不同设备上呈现图形和文本。 设备上下文类是 -
wx.ScreenDC - 使用它在屏幕上绘画,而不是单个窗口。
wx.ClientDC - 使用它在窗口的客户区域(没有边框和其他装饰的部分)上绘制,但不要在wxPaintEvent中使用它。
wx.PaintDC - 使用它在窗口的客户区域上绘制,但only在wxPaintEvent中绘制。
wx.WindowDC - 用它来绘制窗口的整个区域,包括装饰。 这可能不适用于非Windows平台。
wxPython的绘图API为绘制形状,文本和图像提供了不同的功能。 绘图目的所需的对象,如Color,Pen,Brush和Font也可以使用GDI类构造。
wx.Colour Class
颜色对象表示RGB(红色,绿色和蓝色)强度值的组合,每个强度值的范围为0-255。 有一些预定义的颜色对象,如 -
- wxBLACK
- wxBLUE
- wxCYAN
- wxGREEN
- wxYELLOW
- wxLIGHT_GREY
- wxRED
- wxWHITE
具有RGB值的自定义组合的颜色形成为wx.Colour object 。
wx.Colour(r,g,b)
wx.Pen Class
笔对象确定图形形状的颜色,宽度和样式,如线,矩形,圆等。
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对象需要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有许多功能,可以方便地绘制不同的形状,文本和图像。
SN | 功能和描述 |
---|---|
1 | DrawRectangle() 绘制给定尺寸的矩形 |
2 | DrawCircle() 在给定点绘制一个圆作为中心和半径 |
3 | DrawEllipse() 绘制具有给定x和y半径的椭圆 |
4 | DrawLine() 在两个wx.Point对象之间绘制一条线 |
5 | DrawBitmap() 在给定位置绘制图像 |
6 | DrawText() 在指定位置显示给定文本 |
例子 (Example)
以下示例在以下示例中实现,使用了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()
上面的代码产生以下输出 -