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 -