Как заменить внешний вид 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_())
