Как разместить текст поверх QProgressBar?

Как в Qt запихнуть в прогресс бар большие числа, сделать текст поверх полосы заполнения и поменять цвет?

У меня:

введите сюда описание изображения


Цель:

введите сюда описание изображения



Ответы (1 шт):

Автор решения: S. Nick

Я не уверен, что правильно понимаю то что вы хотите сделать и какие данные и откуда вы собираетесь брать.

А нарисовать можно что угодно и разместить куда хотите.

Как вариант, это может выглядеть так:

import sys
from PyQt5.Qt import *


class Test(QWidget):
    def __init__(self):
        super().__init__()
        
        self.free_GB = 200                        # например 200
        self.selected_for_saving = 100            # например 100 
        
        self.progressBar = QProgressBar(
            minimum=0, 
            maximum=self.selected_for_saving, 
            alignment=Qt.AlignCenter,
            objectName='progressBar')
        self.progressBar.setMinimumWidth(150)
        self.progressBar.setValue(0)
        self.progressBar.setFormat(f'Занято {100 - ((self.free_GB - self.progressBar.value()) * 100 / self.free_GB):.2f} %')  #

        self.label = QLabel(
            f'Свободно {self.free_GB - self.progressBar.value()} '\
            f'Гб из {self.free_GB} Гб')
            
        self.frame = QFrame()
        self.frame.setFrameShape(QFrame.StyledPanel)
        self.frame.setFrameShadow(QFrame.Raised)
        
        self.hbox = QHBoxLayout(self.frame)
        self.hbox.addWidget(self.progressBar, 1)
        self.hbox.addWidget(self.label, 1)

        self.vbox = QVBoxLayout(self)
        self.vbox.addWidget(self.frame)
        
        self.qtimer = QTimer()
        self.qtimer.setInterval(100)  # интервал тайм-аута в миллисекундах                              
        self.qtimer.timeout.connect(self.qtimer_timeout)  
        # стартанем таймер через 2 сек. 
        QTimer.singleShot(2000, self.qtimer.start)

    def qtimer_timeout(self):
        value = self.progressBar.value()
        self.progressBar.setValue(value + 1)
        _free_GB = self.free_GB - self.progressBar.value()
        self.label.setText(
            f'Свободно {_free_GB} Гб из {self.free_GB} Гб ')
        self.progressBar.setFormat(f'Занято {100 - (_free_GB * 100 / self.free_GB):.2f} %')  #

        if self.progressBar.value() == self.selected_for_saving:
            self.qtimer.stop()

QSS = '''
QFrame {
    background-color: #2F4454;
    color: rgb(220, 220, 220);
}
QProgressBar {
    background-color: #DA7B93;
    color: rgb(200, 200, 200);
    border-style: none;
    border-radius: 4px;
    text-align: center;
    font-size: 15px;
}
QProgressBar::chunk {
    border-radius: 4px;
    background-color: qlineargradient(spread:pad x1:0, x2:1, y1:0.511364, y2:0.523, stop:0 #1C3334, stop:1 #376E6F);
}
'''

if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyleSheet(QSS)
    app.setFont(QFont("Times", 12, QFont.Bold))
    w = Test()
    w.resize(600, 200)
    w.show()
    sys.exit(app.exec())

введите сюда описание изображения

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка