gpt4 book ai didi

python - 使用导入模块中的变量向 QProgressBar 报告进度

转载 作者:行者123 更新时间:2023-12-01 03:37:45 24 4
gpt4 key购买 nike

我有一个 PyQT GUI 应用程序 progress_bar.py,带有一个进度条和一个带有 process_files() 函数的外部模块 worker.py它对文件列表执行一些例程,并使用 percent 变量报告当前进度。

我想做的是使用QProgressBar.setValue()方法报告worker.process_files的当前进度,但我不知道如何实现它(回调函数什么的?)

这是我的模块:

progress_bar.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_())

worker.py

def process_files():
file_list = ['file1', 'file2', 'file3']
counter = 0
for file in file_list:
# do_stuff_with_the_file
counter += 1
percent = 100 * counter / len(file_list)
print percent

最佳答案

制作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

关于python - 使用导入模块中的变量向 QProgressBar 报告进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40140531/

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