Как добавить шкалу на QProgressBar в PyQt5?

Как можно добавить отметку нуля или шкалу на QProgressBar при отображении температуры?
Изображение к вопросу
  • 15 сентября 2023 г. 10:17
Ответы на вопрос 1
Для добавления шкалы или отметки нуля на `QProgressBar` в PyQt5, можно использовать кастомные рисовальщики (painter) и переопределить метод `paintEvent`. 

Пример кода ниже показывает, как добавить шкалу с отметкой нуля на `QProgressBar` при отображении температуры:

```python
import sys
from PyQt5 import QtWidgets, QtGui, QtCore

class CustomProgressBar(QtWidgets.QProgressBar):
    def __init__(self, parent=None):
        super(CustomProgressBar, self).__init__(parent)
        
        self.setTextVisible(False)  # отключаем отображение текста
        
    def paintEvent(self, event):
        painter = QtGui.QPainter()
        painter.begin(self)
        self.drawTemperatureScale(painter)
        self.drawProgressBar(painter)
        painter.end()
        
    def drawTemperatureScale(self, painter):
        # Задаем размеры шкалы
        scale_width = 20
        scale_height = 8
        
        # Определяем позицию нулевой отметки на шкале
        zero_position = self.width() * (1 - (self.value() - self.minimum()) / (self.maximum() - self.minimum()))
        
        # Создаем красную кисть для отметки нуля
        zero_mark_brush = QtGui.QBrush(QtGui.QColor(255, 0, 0))
        painter.setBrush(zero_mark_brush)
        
        # Рисуем отметку нуля
        zero_mark_rect = QtCore.QRectF(zero_position, 0, scale_width, scale_height)
        painter.drawRect(zero_mark_rect)
        
    def drawProgressBar(self, painter):
        # Рисуем стандартную прогресс-бар
        super(CustomProgressBar, self).paintEvent(painter)


def main():
    app = QtWidgets.QApplication(sys.argv)
    
    progressBar = CustomProgressBar()
    progressBar.setMinimum(-10)
    progressBar.setMaximum(40)
    progressBar.setValue(25)
    
    progressBar.show()
    
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()
```
В этом примере создается кастомный виджет `CustomProgressBar`, который переопределяет метод `paintEvent`. Внутри метода `paintEvent` рисуется красная отметка нуля на шкале `QProgressBar`. Этот виджет также настраивает минимальное и максимальное значения шкалы и устанавливает текущее значение прогресса.

Вы можете изменить размеры шкалы, цвета и другие параметры внутри метода `drawTemperatureScale` согласно вашим потребностям.
Похожие вопросы