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 -