我有一个PyQT GUI应用程序progress_bar.py
,其中包含一个进度条和一个带有worker.py
函数的外部模块process_files()
,它使用一个文件列表执行一些例程并使用{报告当前进度{1}}变量。
我想要做的是使用percent
方法报告worker.process_files
的当前进度,但我不知道如何实现它(回调函数或什么?)
以下是我的模块:
progress_bar.py
QProgressBar.setValue()
worker.py
import sys
from PyQt4 import QtGui
from worker import process_files
class Window(QtGui.QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.setGeometry(100, 100, 300, 100)
self.progress = QtGui.QProgressBar(self)
self.progress.setGeometry(100, 50, 150, 20)
self.progress.setValue(0)
self.show()
app = QtGui.QApplication(sys.argv)
GUI = Window()
# process files and report progress using .setValue(percent)
process_files()
sys.exit(app.exec_())
答案 0 :(得分:2)
使process_files
函数成为产生值(进度值)的生成器函数,并将其作为回调传递给Window
类中更新的方法进度条值。我在您的函数中添加了time.sleep
调用,以便您可以观察进度:
import time
from worker import process_files
class Window(QtGui.QMainWindow):
def __init__(self):
...
def observe_process(self, func=None):
try:
for prog in func():
self.progress.setValue(prog)
except TypeError:
print('callback function must be a generator function that yields integer values')
raise
app = QtGui.QApplication(sys.argv)
GUI = Window()
# process files and report progress using .setValue(percent)
GUI.observe_process(process_files)
sys.exit(app.exec_())
<强> worker.py 强>
def process_files():
file_list = ['file1', 'file2', 'file3']
counter = 0
for file in file_list:
counter += 1
percent = 100 * counter / len(file_list)
time.sleep(1)
yield percent
<强>结果强>:
处理file2