我有一个带状态栏的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代码,返回小计的更好方法是什么?
答案 0 :(得分:2)
将进度条设置为(自定义)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))
我希望有所帮助。