gpt4 book ai didi

python - 将进度从线程发送到 gui

转载 作者:行者123 更新时间:2023-11-28 17:47:30 25 4
gpt4 key购买 nike

我有一个带有状态栏的 qt 程序。我正在寻找更新此状态栏的好方法。我当然可以从代码发出信号,但我想将 gui 和“真实”代码分开,并且我希望代码能够独立于 gui 运行。我想出的解决方案是将小计生成给 gui,如下面的一个极其简化的示例所示。

#in file1:
from time import sleep

class WorkerClass():
def updater(self):
yield 10 # total
if some_condition:
yield 'end' # return early
for i in xrange(1, 11):
sleep(1) # dummy for real task
yield i # subtotal


#in file2, in some function in the MainWindow class:
worker = WorkerClass()
u = worker.updater()
total = u.next()
self.progress_bar.setRange(0, total)
for i in u:
if i == 'end': break
self.progress_bar.setValue(i)
print 'done!'

但是我觉得这不是应该的方式。在不使用 file1 中的 qt 代码的情况下,返回小计的更好方法是什么?

最佳答案

将进度条设置为(自定义)observer .例如:

def dowork(observer=None):
worker = WorkerClass()
u = worker.updater()
total = u.next()
if observer:
observer.progress_total(total)
for i in u:
if i == 'end': break
if observer:
observer.progress(i)
print 'done!'

观察者可以看起来像:

class ProgressBarObserver(object):
def __init__(self, progbar):
self.progbar = progbar
def progress_total(self, n):
self.progbar.setRange(0, n)
def progress(self, i):
self.progbar.setValue(i)

然后调用代码将它们配对:

dowork(ProgressBarObserver(self.progress_bar))

希望对您有所帮助。

关于python - 将进度从线程发送到 gui,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15852490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com