类似于this question,但用于pyqt。我有一个应用程序有两个线程,其中一个线程处理一些数据(耗时),第二个线程显示结果并要求对结果进行验证。我想显示进度条中处理的对象的数量。但是,我还想显示用户验证的对象数。处理的数量将始终等于或大于已验证对象的数量(因为您无法验证尚未验证的对象)。本质上,它有点像youtube视频的加载条,显示灰色部分“已加载”,红色部分“已观看”。这是pyqt支持的内容吗?QProgressBar的文档似乎没有暗示有任何支持。使用PyQt5和python3.6。在
这里有一个最小可行的代码,有两个单独的进度条,一个是处理的对象的数量,另一个是验证的数量,但我希望它们重叠。。。在
import sys
from PyQt5.QtWidgets import (QApplication, QDialog,
QProgressBar, QPushButton)
class Actions(QDialog):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('Progress Bar')
self.objectsToProcess = 100
self.objectsProcessed = 0
self.objectsVerified = 0
self.processProgress = QProgressBar(self)
self.processProgress.setGeometry(5, 5, 300, 25)
self.processProgress.setMaximum(self.objectsToProcess)
self.verifyProgress = QProgressBar(self)
self.verifyProgress.setGeometry(5, 35, 300, 25)
self.verifyProgress.setMaximum(self.objectsToProcess)
self.processButton = QPushButton('Process', self)
self.processButton.move(5, 75)
self.verifyButton = QPushButton('Verify', self)
self.verifyButton.move(90, 75)
self.show()
self.processButton.clicked.connect(self.process)
self.verifyButton.clicked.connect(self.verify)
def process(self):
if self.objectsProcessed + 1 < self.objectsToProcess:
self.objectsProcessed += 1
self.processProgress.setValue(self.objectsProcessed)
def verify(self):
if self.objectsVerified < self.objectsProcessed:
self.objectsVerified += 1
self.verifyProgress.setValue(self.objectsVerified)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Actions()
sys.exit(app.exec_())
上述代码的结果:
一种可能的解决方案是在QProgressBar中创建一个新属性,该属性显示了另一种改进,要进行绘制,我们可以使用QProxyStyle:
感谢@eyllanesc提供了一个健壮的解决方案。我选择使用一种更轻巧(公认是老套的)解决方案,将两个进度条重叠,并使用
QGraphicsOpacityEffect
使顶部栏稍微透明。在结果:
相关问题 更多 >
编程相关推荐