08 wxPython Guage Class


wxPython中的进度条控件称为 Gauge。Wx.Gauge类对象显示垂直或水平条,以图形方式显示递增数量。它通常用于演示复制文件或安装软件等过程的进展。

Wx.Gauge 控件可用于确定模式和不确定模式。当完成任何操作所需的时间可以相当准确地确定时,仪表进度条显示已完成任务的百分比。但是,在不确定模式下,它仅表示该过程正在进行中。

在确定模式中,进度位置定期更新。在不确定模式下,调用Pulse()函数将更新进度条。

Wx.Gauge类构造函数所需的参数是

wx.Gauge(parent, id, range, pos, size, style)

范围参数设置仪表的最大值。在不确定模式下,将忽略此参数。

Gauge类的可能样式参数是

序号 参数和描述
1

wx.GA_HORIZONTAL

进度条的水平布局

2

wx.GA_VERTICAL

进度条的垂直布局

3

wx.GA_SMOOTH

使用一个像素宽的更新步骤平滑进度条

4

wx.GA_TEXT

以百分比显示当前值

下表列出了此类的一些重要方法

序号 方法和描述
1

GetRange()

返回仪表的最大值

2

SetRange()

设置仪表的最大值

3

GetValue()

返回仪表的当前值

4

SetValue( )

以编程方式设置当前值

5

Pulse( )

将仪表切换到不确定模式

在以下示例中,在面板的垂直框大小调整器中添加了一个水平Gauge对象。

self.gauge = wx.Gauge(pnl, range = 20, size = (250, 25), style = wx.GA_HORIZONTAL)

还有一个按钮,其click事件与处理函数相关联。

self.btn1 = wx.Button(pnl, label = "Start")
self.Bind(wx.EVT_BUTTON, self.OnStart, self.btn1)

处理函数OnStart()每秒后更新一次计量器的进度。

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

该示例的完整代码如下

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

上面的代码产生以下输出

仪表输出