我想用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}$或者有更好的方法吗?在
这是一个普遍的问题。(除非你已经在另一个线程上运行这个,否则你会阻塞整个用户界面,而不仅仅是更新进度条,对吧?)有两种解决方法。在
将回调传递给runPrediction,并使其在循环中每隔X次、每Y%或每Z秒调用
progressCallback(sofar, total)
。(您可以使用其他通信机制post到队列并触发条件、通过管道或套接字发送消息等-但想法是相同的)将运行预测分解为可以按顺序运行的单独的较小的作业,并在每次启动下一个作业时更新进度。
你的解决方案基本上是第二个想法的一个稍显笨拙,但通常非常合理的版本。如果没有明确的方法来分解这份工作,但是有一个合理的方法可以中止这份工作,把它藏在那里,然后再继续工作,那实际上就是把工作分解了,对吧?在
在Python中,结果通常返回到第二个更简单的结果生成器中。然后在每个值返回时更新进度。在
相关问题 更多 >
编程相关推荐