Метод обновления wx.ProgressDialog имеет аргумент newmsg, который должен дать текстовое обновление о том, что происходит на каждом этапе процесса, но мой код делает это неправильно.
Вот ссылка на документацию для wx.ProgressDialog http://www.wxpython.org/docs/api/wx.ProgressDialog-class.html
Кроме того, когда я запускаю свой код, индикатор выполнения сам перестает обновляться, когда завершается примерно на 50 процентов.
Может кто-нибудь показать мне, как исправить эти две проблемы?
Вот мой код:
import wx
import time
class Frame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, title="ProgressDialog sample")
self.progressMax = 4
self.count = 0
self.newstep='step '+str(self.count)
self.dialog = None
self.OnTimer(self.count)
def OnTimer(self, evt):
if not self.dialog:
self.dialog = wx.ProgressDialog("Progress in processing your data.",
self.newstep,
self.progressMax,
style=wx.PD_CAN_ABORT
| wx.PD_APP_MODAL
| wx.PD_SMOOTH
| wx.PD_AUTO_HIDE)
# Do Step One
print '----------------------------'
print 'Starting Step One now.'
self.count += 1
self.newstep='step '+str(self.count)
print 'self.count is: ',self.count
print 'self.newstep is: ',self.newstep
keepGoing = self.dialog.Update(self.count,self.newstep)
print '----------------------------'
time.sleep(5)
# Do Step Two
print '----------------------------'
print 'Starting Step Two now.'
self.count += 1
self.newstep='step '+str(self.count)
print 'self.count is: ',self.count
print 'self.newstep is: ',self.newstep
keepGoing = self.dialog.Update(self.count,self.newstep)
print '----------------------------'
time.sleep(5)
# Do Step Three
print '----------------------------'
print 'Starting Step Three now.'
self.count += 1
self.newstep='step '+str(self.count)
print 'self.count is: ',self.count
print 'self.newstep is: ',self.newstep
keepGoing = self.dialog.Update(self.count,self.newstep)
print '----------------------------'
time.sleep(5)
# Do Step Four
print '----------------------------'
print 'Starting Step Four now.'
self.count += 1
self.newstep='step '+str(self.count)
print 'self.count is: ',self.count
print 'self.newstep is: ',self.newstep
keepGoing = self.dialog.Update(self.count,self.newstep)
print '----------------------------'
time.sleep(5)
# Delete the progress bar when it is full
self.dialog.Update(self.progressMax)
time.sleep(3)
self.dialog.Destroy()
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = Frame(None)
frame.Show()
app.MainLoop()
Обратите внимание, что я распечатываю все, чтобы проверить прогресс. Результат команд печати отличается от того, что показано в диалоговом окне прогресса. Команды печати, кажется, делают то, что говорит им код, но диалог прогресса, кажется, не делает то, что говорит код, и диалог прогресса не согласуется с результатом команд печати .
Это в версии 2.6 Python.
РЕДАКТИРОВАТЬ Один:
----------------------------------------------- --------------------------------
Я отредактировал код выше, чтобы соответствовать предложениям adw. Проблема не обновления newmsg, похоже, была устранена, но сама индикатор выполнения по-прежнему заполнен только на 50%, и это происходит, когда вывод newmsg в диалоговом окне говорит «шаг 3». Затем индикатор выполнения исчезает. Лица, не использующие компьютер, использующие это программное обеспечение, могут реально подумать, что процесс завершил только около 50% своей работы, завершив работу в начале шага 3. Как я могу отредактировать код, чтобы он показывал «шаг 4» диалоговое окно, и, таким образом, индикатор выполнения заполняется на 100% за секунду или две до уничтожения ProgressDialog?
Редактировать два:
----------------------------------------------- -------------------------------
Я добавил изменения, предложенные ChrisC, в приведенный выше код, как вы можете видеть. Но запуск этого недавно измененного кода все еще вызывает ту же проблему. Так что предложение, похоже, не работает в той форме, которую я понял, когда редактировал код выше. Можете ли вы предложить что-то конкретное, что я могу сделать с приведенным выше кодом? Есть ли что-нибудь, что заставляет его работать на вашем компьютере?