wxPython - Guage 类

  • 简述

    wxPython中的进度条控件被称为Gauge. Wx.Gauge 类对象显示一个垂直或水平条,以图形方式显示递增数量。它通常用于演示复制文件或安装软件等过程的进展。
    Wx.Gauge control可用于确定模式和不确定模式。当可以相当准确地确定完成任何操作所需的时间时,仪表进度条会显示已完成任务的百分比。但是,在不确定模式下,它仅表示该过程正在进行中。
    在确定模式下,进度位置会定期更新。在不确定模式下,调用 Pulse() 函数将更新进度条。
    Wx.Gauge 类构造函数所需的参数是 -
    
    wx.Gauge(parent, id, range, pos, size, style)
    
    range 参数设置仪表的最大值。在不确定模式下,此参数被忽略。
    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)
    
    还有一个按钮,其单击事件与处理函数相关联。
    
    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()
    
    上面的代码产生以下输出 -
    仪表输出