我正在努力让一个测量条在脉冲运行时运行,所以我已经回到基础并得到了这个基本代码仍然不能正常工作
import wx
class GaugeFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, 'Gauge Example', size=(350, 150))
panel = wx.Panel(self, -1)
self.gauge = wx.Gauge(panel, -1, 50, (20, 50), (250, 25))
self.gauge.Pulse()
app = wx.PySimpleApp()
GaugeFrame().Show()
app.MainLoop()
我尝试过wxpython示例,其中显示了两个使用wx.Timer的仪表,另一个使用了脉冲。当我取下定时器时,设定为脉冲的压力表停止工作。
因此,我只能认为甚至设置为脉冲的仪表需要有一个计时器。
这是正确的吗?
我尝试过添加
self.gauge.Refresh()
和
self.gauge.Refresh(True)
但似乎没有帮助
任何人都知道解决方案
感谢
答案 0 :(得分:1)
从Gauge document开始,您需要在取得一些进展后定期致电。您必须一次又一次地调用它来显示进度,Pulse用于不确定模式,但您可以移动一点以指示用户已经取得了一些进展。
但是如果你只是想愚弄进展,那么你应该将它绑定到计时器。只是在init中调用它没有任何意义。
我修改了示例演示代码只是为了愚弄,你可以将它绑定到你的子进程并设置一些检查点,如果你真的想以不确定的模式运行它,可以提高/降低测量速度。
import wx
class GaugeFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, 'Gauge Example', size=(350, 150))
panel = wx.Panel(self, -1)
self.fool = 0
self.gspeed = 200
self.gauge = wx.Gauge(panel, -1, 50, (20, 50), (250, 25))
self.timer = wx.Timer(self)
self.timer.Start(self.gspeed)
self.Bind(wx.EVT_TIMER, self.TimerHandler)
def __del__(self):
self.timer.Stop()
def TimerHandler(self, event):
self.fool = self.fool+1
if self.fool == 20:
self.fool = 0
self.gspeed = self.gspeed - 20
if self.gspeed <= 0:
self.timer.Stop()
self.ShowMessage()
self.Close()
else:
self.timer.Start(self.gspeed)
self.gauge.Pulse()
def ShowMessage(self):
wx.MessageBox('Loading Completed', 'Info', wx.OK | wx.ICON_INFORMATION)
app = wx.PySimpleApp()
GaugeFrame().Show()
app.MainLoop()