在pyProgress中按下按钮时如何设置“取消”按钮

时间:2019-08-30 12:11:10

标签: python wxpython

您好,我使用wxpython 4windows10。我想将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):
???

1 个答案:

答案 0 :(得分:1)

PyProgress似乎不再具有可操作的Cancel按钮。
改用wx.ProgressDialogwx.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()
相关问题