Прогрессбар в стиле Marquee в wxPython - PullRequest
0 голосов
/ 18 мая 2010

Может кто-нибудь сказать мне, как реализовать прогресс-бар стиль в wxPython? Как указано на MSDN :

Вы можете анимировать это так, что показывает активность, но не указывает, что пропорция задачи выполнена.

Спасибо.

альтернативный текст http://i.msdn.microsoft.com/dynimg/IC100842.png

Я пробовал это, но, похоже, это не работает. Таймер тикает, но индикатор не прокручивается. Любая помощь?

import wx
import time

class MyForm(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Timer Tutorial 1",
                                   size=(500,500))

        # Add a panel so it looks the correct on all platforms
        panel = wx.Panel(self, wx.ID_ANY)

        self.timer = wx.Timer(self)
        self.Bind(wx.EVT_TIMER, self.update, self.timer)
        self.gauProgress = wx.Gauge(panel, range=1000, pos=(30, 50), size=(440, 20))
        self.toggleBtn = wx.Button(panel, wx.ID_ANY, "Start")
        self.toggleBtn.Bind(wx.EVT_BUTTON, self.onToggle)

    def onToggle(self, event):
        btnLabel = self.toggleBtn.GetLabel()
        if btnLabel == "Start":
            print "starting timer..."
            self.timer.Start(1000)
            self.toggleBtn.SetLabel("Stop")
        else:
            print "timer stopped!"
            self.timer.Stop()
            self.toggleBtn.SetLabel("Start")

    def update(self, event):
        print "\nupdated: ",
        print time.ctime()
        self.gauProgress.Pulse()

# Run the program
if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = MyForm().Show()
    app.MainLoop()

Ответы [ 3 ]

1 голос
/ 18 мая 2010

Вот пример:

  def loadBallots(self):
    self.dirtyBallots = Ballots()
    self.dirtyBallots.exceptionQueue = Queue(1)
    loadThread = Thread(target=self.dirtyBallots.loadUnknown, args=(self.filename,))
    loadThread.start()

    # Display a progress dialog
    dlg = wx.ProgressDialog(\
      "Loading ballots",
      "Loading ballots from %s\nNumber of ballots: %d" % 
      (os.path.basename(self.filename), self.dirtyBallots.numBallots),
      parent=self.frame, style = wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME
    )
    while loadThread.isAlive():
      sleep(0.1)
      dlg.Pulse("Loading ballots from %s\nNumber of ballots: %d" %
                (os.path.basename(self.filename), self.dirtyBallots.numBallots))
    dlg.Destroy()

    if not self.dirtyBallots.exceptionQueue.empty():
      raise RuntimeError(self.dirtyBallots.exceptionQueue.get())

Это от здесь .

1 голос
/ 18 мая 2010

wxGauge имеет функцию Pulse ()

gauge.Pulse()
0 голосов
/ 21 мая 2010

как насчет этого?

class ProgressDialog(wx.Dialog):

    def __init__(self, parent, title, to_add=1):
        """Defines a gauge and a timer which updates the gauge."""
        wx.Dialog.__init__(self, parent, title=title, style=wx.CAPTION)
        self.count = 0
        self.to_add = to_add
        self.timer = wx.Timer(self)
        self.gauge = wx.Gauge(self, range=100, size=(180, 30))

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.gauge, 0, wx.ALL, 10)
        self.SetSizer(sizer)
        sizer.Fit(self)
        self.SetFocus()

        self.Bind(wx.EVT_TIMER, self.on_timer, self.timer)
        self.timer.Start(30)  # or however often you want


    def on_timer(self, event):
        """Increases the gauge's progress."""
        self.count += self.to_add
        if self.count > 100:
            self.count = 0
        self.gauge.SetValue(self.count)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...