使用导入模块

时间:2016-10-19 20:03:33

标签: python callback pyqt

我有一个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_())

1 个答案:

答案 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

enter image description here