进度条控件在wxPython中被称为测量仪(Gauge)。Wx.Gauge类对象表示垂直或水平条,其中以图形方式显示递增量。它通常用于展示像复制文件或安装软件的处理进程。
Wx.Gauge控件可以在确定的以及不确定模式中使用。当完成任何操作所需的时间可以被相当精确地确定,测量仪进度条显示已完成任务的百分比。然而如果在不确定模式,它只是表示该过程正在进行中。
在确定模式,进度位置会定期更新。在不确定模式,调用 Pulse() 函数将更新进度条。
Wx.Gauge类的构造函数的参数是必需的 -
wx.Gauge(parent, id, range, pos, size, style)
range 参数设置为表上的最大值。在不确定模式,则忽略此参数。
Gauge类可能的style参数 -
S.N. |
参数和说明
|
---|---|
1 |
wx.GA_HORIZONTAL
进度条的横向布局
|
2 |
wx.GA_VERTICAL
进度条的垂直布局
|
3 |
wx.GA_SMOOTH
平滑的进度条使用一个像素宽度的更新步骤
|
4 |
wx.GA_TEXT
显示当前值在百分比形式
|
此类一些的重要的方法列于下表中 −
S.N. |
方法和说明
|
---|---|
1 |
GetRange()
返回gauge的最大值
|
2 |
SetRange()
设置gauge的最大值
|
3 |
GetValue() 返回当gauge的值 |
4 |
SetValue()
以编程方式设置当前值
|
5 |
Pulse()
切换gauge到不确定模式
|
实例
在下面的例子中,水平Gauge对象是添加在垂直的盒子大小测定器(sizer)的面板中。
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 - www.yiibai.com') ex.MainLoop()
上面的代码产生下面的输出 -