📜  wxPython-图形API

📅  最后修改于: 2020-11-05 05:00:18             🧑  作者: Mango


GDI + (图形绘图接口), CoreGraphicsCairo库构成wxPython中的绘图API框架。 wx.GraphicsContext是主要的可绘制对象,使用该对象可创建各种设备上下文对象。

wx.DC是一个抽象类。它的派生类用于在不同设备上呈现图形和文本。设备上下文类是-

  • wx.ScreenDC-使用它在屏幕上绘制,而不是单个窗口。

  • wx.ClientDC-使用它在窗口的客户区域(没有边框和其他装饰的部分)上绘画,但是不要在wxPaintEvent中使用它。

  • wx.PaintDC-使用它在窗口的客户区域上绘制,但是只能从wxPaintEvent内部绘制。

  • wx.WindowDC-使用它在窗口的整个区域上绘画,包括装饰。在非Windows平台上可能不可用。

wxPython的Drawing API为绘制形状,文本和图像提供了不同的功能。绘图所需的对象,例如颜色,笔,画笔和字体,也可以使用GDI类构造。

wx.Colour Class

颜色对象表示RGB(红色,绿色和蓝色)强度值的组合,每个强度值在0-255的范围内。有一些预定义的颜色对象,例如-

  • 黑色
  • wxBLUE
  • wxCYAN
  • wxGREEN
  • 黄黄
  • wxLIGHT_GREY
  • wxRED
  • wx白色

具有RGB值的自定义组合的颜色形成为wx.Colour对象

wx.Colour(r,g,b)

wx.Pen类

笔对象确定图形的颜色,宽度和样式,例如线条,矩形,圆形等。

预定义的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类

画笔是另一个基本图形对象,需要填充矩形,椭圆形,圆形等形状的背景。

自定义的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具有许多有助于绘制不同形状,文本和图像的功能。

S.N. Functions & Description
1

DrawRectangle()

Draws a rectangle of given dimensions

2

DrawCircle()

Draws a circle at the given point as center and radius

3

DrawEllipse()

Draws an ellipse with the given x and y radius

4

DrawLine()

Draws a line beween two wx.Point objects

5

DrawBitmap()

Draw an image at the given position

6

DrawText()

Displays the given text at the specified position

在下面的示例中,使用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()

上面的代码产生以下输出-

绘图演示