wxPython - classe Guage
O controle da barra de progresso em wxPython é chamado Gauge. O objeto de classe Wx.Gauge mostra uma barra vertical ou horizontal, que mostra graficamente a quantidade crescente. Normalmente é usado para demonstrar a progressão de um processo, como copiar arquivos ou instalar um software.
Wx.Gauge controlpode ser usado tanto no modo determinado quanto no modo indeterminado. Quando o tempo necessário para concluir qualquer operação pode ser determinado com bastante precisão, a barra de progresso do medidor mostra a porcentagem da tarefa concluída. Porém, no modo indeterminado, indica apenas que o processo está em andamento.
No modo determinado, a posição de progresso é atualizada periodicamente. No modo indeterminado, chamar a função Pulse () atualizará a barra de progresso.
Os parâmetros exigidos pelo construtor da classe Wx.Gauge são -
wx.Gauge(parent, id, range, pos, size, style)
O parâmetro de intervalo define o valor máximo para o medidor. No modo indeterminado, este parâmetro é ignorado.
Os parâmetros de estilo possíveis para a classe Gauge são -
SN | Parâmetros e descrição |
---|---|
1 | wx.GA_HORIZONTAL O layout horizontal da barra de progresso |
2 | wx.GA_VERTICAL O layout vertical da barra de progresso |
3 | wx.GA_SMOOTH Suaviza a barra de progresso com uma etapa de atualização de um pixel |
4 | wx.GA_TEXT Mostra o valor atual em porcentagem |
Alguns dos métodos importantes desta classe estão listados na tabela a seguir -
SN | Métodos e Descrição |
---|---|
1 | GetRange() Retorna o valor máximo do medidor |
2 | SetRange() Define o valor máximo para o medidor |
3 | GetValue() Retorna o valor atual do medidor |
4 | SetValue() Define o valor atual programaticamente |
5 | Pulse() Muda o medidor para o modo indeterminado |
Exemplo
No exemplo a seguir, um objeto Gauge horizontal é adicionado ao dimensionador de caixa vertical do painel.
self.gauge = wx.Gauge(pnl, range = 20, size = (250, 25), style = wx.GA_HORIZONTAL)
Também existe um botão cujo evento de clique está associado a uma função de manipulador.
self.btn1 = wx.Button(pnl, label = "Start")
self.Bind(wx.EVT_BUTTON, self.OnStart, self.btn1)
A função de manipulador OnStart () atualiza o progresso do medidor a cada segundo.
def OnStart(self, e):
while True:
time.sleep(1);
self.count = self.count + 1
self.gauge.SetValue(self.count)
if self.count >= 20:
print "end"
return
O código completo para o exemplo é o seguinte -
import wx
import time
class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (300,200))
self.InitUI()
def InitUI(self):
self.count = 0
pnl = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox2 = wx.BoxSizer(wx.HORIZONTAL)
self.gauge = wx.Gauge(pnl, range = 20, size = (250, 25), style = wx.GA_HORIZONTAL)
self.btn1 = wx.Button(pnl, label = "Start")
self.Bind(wx.EVT_BUTTON, self.OnStart, self.btn1)
hbox1.Add(self.gauge, proportion = 1, flag = wx.ALIGN_CENTRE)
hbox2.Add(self.btn1, proportion = 1, flag = wx.RIGHT, border = 10)
vbox.Add((0, 30))
vbox.Add(hbox1, flag = wx.ALIGN_CENTRE)
vbox.Add((0, 20))
vbox.Add(hbox2, proportion = 1, flag = wx.ALIGN_CENTRE)
pnl.SetSizer(vbox)
self.SetSize((300, 200))
self.Centre()
self.Show(True)
def OnStart(self, e):
while True:
time.sleep(1);
self.count = self.count + 1
self.gauge.SetValue(self.count)
if self.count >= 20:
print "end"
return
ex = wx.App()
Mywin(None,'wx.Gauge')
ex.MainLoop()
O código acima produz a seguinte saída -