Как заменить внешний вид QSlider?

Я хочу изменить внешний вид QSlider на QProgressBar Который находится внизу

Можно ли как-нибудь перенести qss в QSlider или cкрыть QSlider и менять значение QProgressBar когда я на него нажимаю?

import sys
from PyQt5 import QtWidgets, QtCore, QtGui

class Test(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.resize(500, 500)
        self.lay = QtWidgets.QVBoxLayout(self)
        self.slider_1 =  QtWidgets.QSlider(self)
        
        self.slider_1.setMaximum(100)
        self.slider_1.setMinimum(1)
        
        self.slider_1.setValue(5)
        
        
        self.slider_1.setOrientation(QtCore.Qt.Horizontal)
            
        self.progressBar_1 = QtWidgets.QProgressBar(self)
        self.progressBar_1.setStyleSheet('QProgressBar { border: none; background-color: rgba(255, 255, 255, 255); text-align: center; color: rgba(255, 255, 255, 0);}QProgressBar::chunk {background-color: blue;border: 2px solid red;width: 10px;margin: 2px;}')
        
        self.progressBar_1.setValue(self.slider_1.value())
        self.progressBar_1.setMaximum(self.slider_1.maximum())
        self.progressBar_1.setMinimum(self.slider_1.minimum())
        
        self.lay.addWidget(self.slider_1)
        self.lay.addWidget(self.progressBar_1) 
        
        self.slider_1.valueChanged[int].connect(lambda: self.changeValue(self.slider_1, self.progressBar_1))
        
    def changeValue(self, cb, lb) :
        lb.setValue(cb.value())

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = Test()
    w.show()
    sys.exit(app.exec_())

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

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

я немного спрятал QSlider

import sys
from PyQt5 import QtWidgets, QtCore, QtGui


class Test(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.resize(500, 500)
        
        self.slider_1 =  QtWidgets.QSlider(self)
        self.slider_1.setMaximum(100)
        self.slider_1.setMinimum(1)
        self.slider_1.setValue(5)
        self.slider_1.setOrientation(QtCore.Qt.Horizontal)
            
        self.progressBar_1 = QtWidgets.QProgressBar(self)
        self.progressBar_1.setStyleSheet('QProgressBar { border: none; background-color: rgba(255, 255, 255, 255); text-align: center; color: rgba(255, 255, 255, 0);}QProgressBar::chunk {background-color: blue;border: 2px solid red;width: 10px;margin: 2px;}')
        self.progressBar_1.setValue(self.slider_1.value())
        self.progressBar_1.setMaximum(self.slider_1.maximum())
        self.progressBar_1.setMinimum(self.slider_1.minimum())
        
        self.lay = QtWidgets.QVBoxLayout(self)        
#        self.lay.addWidget(self.slider_1)
        self.lay.addStretch(1)                                        # +
        self.lay.addWidget(self.progressBar_1, stretch=0)
        self.lay.addStretch(1)                                        # +
        self.x, self.y, self.w, self.h = ..., ..., ..., ...           # +
        
        self.slider_1.valueChanged[int].connect(
            lambda: self.changeValue(self.slider_1, self.progressBar_1))
       
    def changeValue(self, cb, lb) :
        lb.setValue(cb.value())

    def resizeEvent(self, event):                                     # +++
        self.x = self.progressBar_1.pos().x()
        self.y = self.progressBar_1.pos().y()
        self.w = self.progressBar_1.size().width()
        self.h = self.progressBar_1.size().height()        
        self.slider_1.setGeometry(self.x, self.y-5, self.w, self.h)
        

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = Test()
    w.show()
    sys.exit(app.exec_())

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

→ Ссылка