wx.ProgressDialog的更新方法有一个newmsg参数,应该提供有关该过程每个步骤中发生的事情的文本更新,但我的代码没有正确执行此操作。 < / p>
以下是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建议的更改添加到上面的代码中,如您所见。但是运行这个新改变的代码仍然会产生同样的问题。 因此,当我编辑上述代码时,该建议似乎无法以我理解的形式运行。您能否就上述代码提出具体建议?有什么能使它在您的计算机上运行吗?
答案 0 :(得分:1)
Python标识符区分大小写,因此newstep
与newStep
不同。
对于栏本身,当我运行你的代码时,它可以正常工作。虽然我不得不在任何地方将(keepGoing, skip)
更改为keepGoing
,但可能是版本差异(我有wx.VERSION_STRING == '2.6.3.2'
)。
答案 1 :(得分:1)
您的问题是wx.PD_AUTO_HIDE
。正如文档中所述,使用该样式
一旦达到进度表的最大值,就会使进度对话框从屏幕上消失。
将您的代码更改为
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)
然后ChrisC建议的代码将起作用。
答案 2 :(得分:0)
您可以在self.dialog.Update(self.progressMax)
之前致电self.dialog.Destroy()
,也许可以点time.sleep(1)
进行明显停顿吗?