wxPython - API de desenho

GDI+ (Interface de Desenho Gráfico), CoreGraphics e Cairo librariesformar a estrutura da API de desenho em wxPython. wx.GraphicsContext é o objeto drawable principal, usando o qual vários objetos de contexto de dispositivo são criados.

wx.DC é uma classe abstrata. Suas classes derivadas são usadas para renderizar gráficos e texto em diferentes dispositivos. As classes Device Context são -

  • wx.ScreenDC - Use para pintar na tela, em vez de uma janela individual.

  • wx.ClientDC - Use para pintar na área cliente da janela (a parte sem bordas e outras decorações), mas não use de dentro de um wxPaintEvent.

  • wx.PaintDC- Use para pintar na área do cliente da janela, mas apenas de dentro de um wxPaintEvent.

  • wx.WindowDC- Use para pintar em toda a área da janela, incluindo decorações. Isso pode não estar disponível em plataformas não Windows.

A API de desenho de wxPython oferece diferentes funções para desenhar formas, textos e imagens. Objetos necessários para fins de desenho, como Cor, Caneta, Pincel e Fonte também podem ser construídos usando classes GDI.

wx.Colour Class

O objeto de cor representa a combinação de valores de intensidade RGB (VERMELHO, Verde e Azul), cada um na escala de 0-255. Existem alguns objetos de cor predefinidos como -

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

A cor com combinação personalizada de valores RGB é formada como wx.Colour object.

wx.Colour(r,g,b)

classe wx.Pen

O objeto Caneta determina a cor, largura e estilo da forma dos gráficos, como linha, retângulo, círculo, etc.

Predefined Pen objects são -

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 são -

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

classe wx.Brush

Pincel é outro objeto gráfico elementar necessário para preencher os fundos de formas como retângulo, elipse, círculo, etc.

Um objeto Brush personalizado requer os parâmetros wx.Colour e Brush style. A seguir está uma lista de estilos de pincel predefinidos -

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 possui uma série de funções que facilitam o desenho de diferentes formas, texto e imagem.

SN Funções e descrição
1

DrawRectangle()

Desenha um retângulo com as dimensões fornecidas

2

DrawCircle()

Desenha um círculo no ponto determinado como centro e raio

3

DrawEllipse()

Desenha uma elipse com os raios xey dados

4

DrawLine()

Desenha uma linha entre dois objetos wx.Point

5

DrawBitmap()

Desenhe uma imagem na posição dada

6

DrawText()

Mostra o texto fornecido na posição especificada

Exemplo

As funções acima são implementadas no exemplo a seguir, fazendo uso de objetos Caneta, Pincel, Cor e Fonte.

O código completo é o seguinte -

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

O código acima produz a seguinte saída -