一般来说,系统与绘图程序之间的信息交换是由图形设备接口(Graphics Device Interface,GDI)实现的,在wxpython中,通过device context(DC)对象来实现GDI的功能。
DC对象的创建非常简单,只需引用wx.PaintDC
即可,而后则可通过dc来设置画笔dc.SetPen
,有了画笔,就可以进行图形绘制了。于是,我们再考虑到图形的属性,包括形状、颜色与边框等,更细致地说,是图形形状、填充颜色、边框类型、边框颜色。
我们可以通过一个矩形的例子来说明:
上面的窗口由如下代码实现。
import wx
class Example(wx.Frame):
def __init__(self, parent,title):
super(Example,self).__init__(parent,title=title,size=(350,280))
self.Bind(wx.EVT_PAINT, self.OnShowColour)
self.Center() #居中
self.Show() #显示
def OnShowColour(self,evt):
dc = wx.PaintDC(self)
dc.SetPen(wx.Pen('#d4d4d4')) #设置画笔颜色
dc.SetBrush(wx.Brush('#c56c00'))#设置填充颜色
dc.DrawRectangle(10,15,90,60) #绘制矩形
dc.SetBrush(wx.Brush('#1ac500'))
dc.DrawRectangle(130,15,90,60)
dc.SetBrush(wx.Brush('#539e47'))
dc.DrawRectangle(250,15,90,60)
dc.SetBrush(wx.Brush('#004fc5'))
dc.DrawRectangle(10,105,90,60)
def test():
app = wx.App() #创建App对象
Example(None,'Rect')#创建绘图窗口
app.MainLoop()
if __name__ == "__main__":
test()
首先,通过dc.SetPen()
设置画笔属性,wx.Pen('#d4d4d4')
的标准调用格式为wx.Pen(wx.Colour,width,style)
,width顾名思义即为画笔宽度,'#d4d4d4'是Colour类的一种表示,为红、绿、蓝三组十六进制值的组合,从而定义画笔颜色。除了字符串的表示方法之外,还可以通过引用标准颜色库或者调用wx.Colour()来对颜色进行定义。
例如,wx.Colour(255,0,0),‘Red'和'#FF0000'都表示红色。标准颜色库如表所示:
AQUAMARINE | BLACK | BLUE | BLUE VIOLET | BROWN |
CADET BLUE | CORAL | CORNFLOWER BLUE | CYAN | DARK GREY |
DARK GREEN | DARK OLIVE GREEN | DARK ORCHID | DARK SLATE BLUE | DARK SLATE GREY |
DARK TURQUOISE | DIM GREY | FIREBRICK | FOREST GREEN | GOLD |
GOLDENROD | GREY | GREEN | GREEN YELLOW | INDIAN RED |
KHAKI | LIGHT BLUE | LIGHT GREY | LIGHT STEEL BLUE | LIME GREEN |
MAGENTA | MAROON | MEDIUM AQUAMARINE | MEDIUM BLUE | MEDIUM FOREST GREEN |
MEDIUM GOLDENROD | MEDIUM ORCHID | MEDIUM SEA GREEN | MEDIUM SLATE BLUE | MEDIUM SPRING GREEN |
MEDIUM TURQUOISE | MEDIUM VIOLET RED | MIDNIGHT BLUE | NAVY | ORANGE |
ORANGE RED | ORCHID | PALE GREEN | PINK | PLUM |
PURPLE | RED | SALMON | SEA GREEN | SIENNA |
SKY BLUE | SLATE BLUE | SPRING GREEN | STEEL BLUE | TAN |
THISTLE | TURQUOISE | VIOLET | VIOLET RED | WHEAT |
WHITE | YELLOW | YELLOW GREEN |
除了颜色之外,SetPen中还可以定义其他属性,例如画笔样式:
wx.SOLID
:实线
wx.DOT
:点线
wx.LONG_DASH
:长横线
wx.SHORT_DASH
:短横线
wx.DOT_DASH
:点横线
wx.TRANSPARENT
:无边框
dc.SetBrush为设置笔刷,即图形内部填充,除了wx.Colour()之外,其style包括以下类型
wx.SOLID
:实心填充
wx.BDIAGONAL_HATCH
:右斜纹wx.
CROSSDIAG_HATCH
:左斜纹wx.
FDIAGONAL_HATCH
:斜交叉纹wx.
CROSS_HATCH
:横竖交叉纹
wx.HORIZONTAL_HATCH
:横纹
wx.VERTICAL_HATCH
:纵纹
wx.TRANSPARENT
:无填充
dc.DrawRectangle为矩形绘制命令,其中四个参数分别为左上角点的坐标以及长宽值。除了矩形之外,wxpython提供了许多其他的图形,如表所示
函数 | 图形 | 参数备注 |
---|---|---|
dc.DrawEllipse(x, y, width, height) | 椭圆 | |
dc.DrawRoundedRectangle(x, y, width, height, radius) | 圆角矩形 | radius为圆角半径 |
dc.DrawArc(xStart, yStart, xEnd, yEnd, xc, yc) | 圆弧 | xc,yc为圆心 |
dc.DrawPolygon(points) | 多边形 | 输入为点集 |
dc.DrawRectangle(x, y, width, height) | 矩形 | |
dc.DrawSpline(points) | 曲线 | 输入为点集 |
dc.DrawLines(points) | 折线 | 输入为点集 |
dc.DrawCircle(x, y, radius) | 圆 |
以上就是Python光学仿真wxpython之DC绘图的详细内容,更多关于wxpython之DC绘图的资料请关注编程网其它相关文章!