wxPython - API de dibujo

GDI+ (Interfaz de dibujo de gráficos), CoreGraphics y Cairo librariesforman el marco de dibujo API en wxPython. wx.GraphicsContext es el objeto principal que se puede dibujar, mediante el cual se crean varios objetos de contexto de dispositivo.

wx.DC es una clase abstracta. Sus clases derivadas se utilizan para representar gráficos y texto en diferentes dispositivos. Las clases de contexto de dispositivo son:

  • wx.ScreenDC - Use esto para pintar en la pantalla, a diferencia de una ventana individual.

  • wx.ClientDC - Use esto para pintar en el área del cliente de la ventana (la parte sin bordes y otras decoraciones), pero no lo use desde dentro de un wxPaintEvent.

  • wx.PaintDC- Use esto para pintar en el área del cliente de la ventana, pero solo desde dentro de un wxPaintEvent.

  • wx.WindowDC- Use esto para pintar en toda el área de la ventana, incluidas las decoraciones. Es posible que esto no esté disponible en plataformas que no sean de Windows.

La API de dibujo de wxPython ofrece diferentes funciones para dibujar formas, texto e imágenes. Los objetos necesarios para dibujar, como Color, Pluma, Pincel y Fuente también se pueden construir usando clases GDI.

wx.Colour Class

El objeto de color representa una combinación de valores de intensidad RGB (ROJO, Verde y Azul), cada uno en la escala de 0-255. Hay algunos objetos de color predefinidos como:

  • wxBLACK
  • wxBLUE
  • wxCYAN
  • wxGREEN
  • wxYELLOW
  • wxLIGHT_GREY
  • wxRED
  • wxWHITE

El color con combinación personalizada de valores RGB se forma como wx.Colour object.

wx.Colour(r,g,b)

wx.Pen Clase

El objeto de lápiz determina el color, el ancho y el estilo de la forma de los gráficos como líneas, rectángulos, círculos, etc.

Predefined Pen objects son -

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 son -

wx.SOLID
wx.DOT
wx.LONG_DASH
wx.SHORT_DASH
wx.DOT_DASH
wx.TRANSPARENT

wx.Brush Class

El pincel es otro objeto gráfico elemental necesario para rellenar los fondos de formas como rectángulos, elipses, círculos, etc.

Un objeto Brush personalizado requiere los parámetros de estilo wx.Colour y Brush. La siguiente es una lista de estilos de pincel predefinidos:

wx.SOLID
ANCHO.
wx.BDIAGONAL_HATCH
wx.CROSSDIAG_HATCH
wx.FDIAGONAL_HATCH
wx.CROSS_HATCH
wx.HORIZONTAL_HATCH
wx.VERTICAL_HATCH
wx.TRANSPARENT

wxPython tiene una serie de funciones que facilitan el dibujo de diferentes formas, texto e imágenes.

SN Funciones y descripción
1

DrawRectangle()

Dibuja un rectángulo de dimensiones dadas

2

DrawCircle()

Dibuja un círculo en el punto dado como centro y radio

3

DrawEllipse()

Dibuja una elipse con el radio xey dado

4

DrawLine()

Dibuja una línea entre dos objetos wx.Point

5

DrawBitmap()

Dibuja una imagen en la posición dada

6

DrawText()

Muestra el texto dado en la posición especificada

Ejemplo

Las funciones anteriores se implementan en el siguiente ejemplo, haciendo uso de los objetos Pluma, Pincel, Color y Fuente.

El código completo es el siguiente:

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()

El código anterior produce la siguiente salida: