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: