0

我想用我在另一个子例程上执行的任务的进度更新我在主窗口上的进度条,这可能吗?

为了尽可能清楚,我将有 2 个文件:

在我的Mainwindow.py 中,我会有类似的内容:

import Calculations

#some code
self.ui.progressBar
Calculations.longIteration("parameters")

然后我会有一个单独的文件用于计算:Calculations.py

def longIteration("parameters")

#some code for the loop

"here I would have a loop running"
"And I would like to update the progressBar in Mainwindow"

那可能吗?

还是应该以不同的方式完成?

谢谢。

4

1 回答 1

1

最简单的方法是简单地传递 GUI 对象:

self.ui.progressBar
Calculations.longIteration("parameters", self.ui.progressBar)

并更新progressBarCalculations但是,这有两个问题:

  • 您正在将 GUI 代码与 混合Calculations,谁可能对此一无所知
  • if longIteration是一个长时间运行的函数,顾名思义,你阻塞了你的 GUI 主线程,这将使许多 GUI 框架不满意(并且你的应用程序没有响应)。

另一个解决方案是longIteration在线程中运行,并传递一个用于更新进度条的回调函数:

import threading
def progress_callback():
    #update progress bar here
threading.Thread(target=Calculations.longIteration, args=["parameters", progress_callback]).run()

然后,在里面longIteration,做:

def longIteration( parameters, progress_callback ):
    #do your calculations
    progress_callback() #call the callback to notify of progress

progress_callback如果需要,您可以修改参数以获取参数,显然

于 2014-09-22T09:20:05.347 回答