您好,我使用wxpython 4
和windows10
。我想将PyProgress (AGW)
与Cancel button
集成到我的应用程序中,我希望此按钮Cancel
放在我的应用Paused
。除了我已经添加了“取消”按钮之外,但它不可单击,并且我无法将暂停功能与此按钮绑定。
import wx.lib.agw.pyprogress as PP
def onButton(self, event):
"""
Based on the wxPython demo by the same name
"""
event.Skip()
dlg = PP.PyProgress(None, -1, "Demo", "Demo in progress", agwStyle=wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT)
dlg.SetGaugeProportion(0.2)
dlg.SetGaugeSteps(50)
dlg.SetGaugeBackground(wx.WHITE)
dlg.SetFirstGradientColour(wx.WHITE)
dlg.SetSecondGradientColour(wx.BLUE)
max = 400
keepGoing = True
count = 0
while keepGoing and count < max:
count += 1
wx.MilliSleep(30)
if count >= max / 2:
keepGoing = dlg.UpdatePulse("Half-time!")
else:
keepGoing = dlg.UpdatePulse()
dlg.Destroy()
#if(wx.PD_CAN_ABORT):
#execute onPause(event)
def onPause(self, event):
???
答案 0 :(得分:1)
PyProgress
似乎不再具有可操作的Cancel
按钮。
改用wx.ProgressDialog
或wx.Gauge
。
如果您不希望使用暂停功能,请使用以下代码:
import wx
class PyProgressDemo(wx.Frame):
def __init__(self, parent):
super().__init__(parent)
self.panel = wx.Panel(self, -1)
self.startbutton = wx.Button(self.panel, -1, "Start PyProgress!")
self.startbutton.Bind(wx.EVT_BUTTON, self.onButton)
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(self.startbutton)
self.panel.SetSizer(vbox)
self.Show()
def onButton(self, event):
self.dlg = wx.ProgressDialog('Search personal Data', 'Analyse en cours..', style= wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT)
max = 400
keepGoing = True
count = 0
while keepGoing and count < max:
count += 1
wx.MilliSleep(30)
if count >= max / 2:
(keepGoing, skip) = self.dlg.Pulse("Half-time!")
else:
(keepGoing, skip) = self.dlg.Pulse()
self.dlg.Destroy()
app = wx.App()
prog = PyProgressDemo(None)
app.MainLoop()
如果您想要Pause
函数,我认为您将必须使用Freeze
选项,如下所示:
import wx
class PyProgressDemo(wx.Frame):
def __init__(self, parent):
super().__init__(parent)
self.panel = wx.Panel(self, -1)
self.startbutton = wx.Button(self.panel, -1, "Start PyProgress!")
self.stopbutton = wx.Button(self.panel, -1, "Pause/Unpause PyProgress!")
self.startbutton.Bind(wx.EVT_BUTTON, self.onButton)
self.stopbutton.Bind(wx.EVT_BUTTON, self.onPause)
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(self.startbutton)
vbox.Add(self.stopbutton)
self.panel.SetSizer(vbox)
self.Show()
def onButton(self, event):
self.dlg = wx.ProgressDialog('Search personal Data', 'Analyse en cours..', style= wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT)
max = 400
keepGoing = True
count = 0
try:
while keepGoing and count < max:
if self.dlg.IsFrozen():
wx.Yield()
wx.MilliSleep(30)
continue
count += 1
wx.MilliSleep(30)
if count >= max / 2:
(keepGoing, skip) = self.dlg.Pulse("Half-time!")
else:
(keepGoing, skip) = self.dlg.Pulse()
self.dlg.Destroy()
except:
pass
def onPause(self, event):
try:
if self.dlg.IsFrozen():
self.dlg.Thaw()
else:
self.dlg.Freeze()
except:
pass
app = wx.App()
prog = PyProgressDemo(None)
app.MainLoop()