问题
Hello I use wxpython 4
and windows10
.I want to integrate PyProgress (AGW)
in my App with the Cancel button
and I would like this button Cancel
put my App Paused
. except that I have add the cancel button but it is not clickable and I can not Bind a pause function with this button.
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):
???
回答1:
PyProgress
no longer appears to have an operational Cancel
button.
Use wx.ProgressDialog
or wx.Gauge
instead.
If you don't want a pause function use something like this:
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()
If you want a Pause
function, I think that you will have to use the Freeze
option, something like this:
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()
来源:https://stackoverflow.com/questions/57726520/how-to-set-cancel-button-when-you-press-it-in-pyprogress