如何在执行任务时更新进度条

2024-06-01 19:11:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用wx.progress对话框来展示我计划的进展。我有一个按钮,当按下该按钮时会运行此功能:

def runmiP(self, event):
    predictor.runPrediction(self.uploadProtInterestField.GetValue(), self.uploadAllProteinsField.GetValue(), self.uploadPfamTextField.GetValue(), \
                   self.edit_eval_all.Value, self.edit_eval_small.Value, self.saveOutputField)

predictor是我编写的一个python包。如何从predictor获取进度并在进度条中显示?我只能返回一个值。我应该多次调用它(就像每分钟一样),记住它离开了哪里,返回它的距离,然后再调用它吗?有点像

^{pr2}$

或者有更好的方法吗?在


Tags: self功能valuedefevaledit按钮predictor
1条回答
网友
1楼 · 发布于 2024-06-01 19:11:24

这是一个普遍的问题。(除非你已经在另一个线程上运行这个,否则你会阻塞整个用户界面,而不仅仅是更新进度条,对吧?)有两种解决方法。在

  • 将回调传递给runPrediction,并使其在循环中每隔X次、每Y%或每Z秒调用progressCallback(sofar, total)。(您可以使用其他通信机制post到队列并触发条件、通过管道或套接字发送消息等-但想法是相同的)

  • 将运行预测分解为可以按顺序运行的单独的较小的作业,并在每次启动下一个作业时更新进度。

你的解决方案基本上是第二个想法的一个稍显笨拙,但通常非常合理的版本。如果没有明确的方法来分解这份工作,但是有一个合理的方法可以中止这份工作,把它藏在那里,然后再继续工作,那实际上就是把工作分解了,对吧?在

在Python中,结果通常返回到第二个更简单的结果生成器中。然后在每个值返回时更新进度。在

相关问题 更多 >