Как разместить текст поверх 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())




