wx.ProgressDialog 的 update 方法有一个 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()
请注意,我正在打印所有内容以检查进度。打印命令的结果与进度对话框中显示的不同。打印命令似乎在做代码告诉他们做的事情,但进度对话框似乎没有做代码告诉它做的事情,并且进度对话框与打印命令的结果不一致.
这是 Python 的 2.6 版。
编辑一:
-------------------------------------------------- -----------------------------------------
我编辑了上面的代码以匹配 adw 的建议。不更新 newmsg 的问题似乎已经消除,但进度条本身似乎仍然只有 50% 满,当对话框中的 newmsg 输出显示“第 3 步”时,就会发生这种情况。进度条随即消失。使用该软件的非计算机人员可能实际上认为该过程仅完成了大约 50% 的工作,在第 3 步中提前退出。 如何编辑代码以使其在对话框中显示“第 4 步”,并且在 ProgressDialog 被杀死之前,进度条实际上会填充到 100% 的一两秒钟?
编辑二:
-------------------------------------------------- ----------------------------
如您所见,我将 ChrisC 建议的更改添加到上面的代码中。但是运行这个新更改的代码仍然会出现同样的问题。 因此,当我编辑上面的代码时,这个建议似乎并没有以我理解的形式起作用。你能建议我对上面的代码做一些具体的事情吗?有什么东西可以让它在你的电脑上运行吗?