Кастомизировать QScrollBar с помощью QSS
Если в QListWidget добавить так много элементов, что они выйдут за пределы размера виджета, у QListWidget появится QScrollBar.
Так вот, мне нужно кастомизировать его с помощью QSS.
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Я не знаю о каком QSlider вы говорите,
но если вам надо кастомизировать QScrollBar с помощью QSS,
тогда вот вам вариант:
from PyQt5 import QtWidgets, QtCore, QtGui
class InputBox(QtWidgets.QDialog):
def __init__(self, parent= None):
super(InputBox, self).__init__(parent)
open_message = QtWidgets.QLabel("Enter Value:")
self.txt = QtWidgets.QLineEdit()
save = QtWidgets.QPushButton('Save', clicked=self.accept)
cancel = QtWidgets.QPushButton('Cancel', clicked=self.reject)
grid = QtWidgets.QGridLayout(self)
grid.setSpacing(10)
grid.addWidget(open_message, 0, 0)
grid.addWidget(self.txt, 1, 0, 1, 2)
grid.addWidget(save, 2, 0)
grid.addWidget(cancel, 2, 1)
self.setFixedSize(self.sizeHint())
def save(self):
value = self.txt.text()
return value
class ListForm(QtWidgets.QWidget):
def __init__(self, list_of_items, open_text):
super(ListForm, self).__init__()
open_message = QtWidgets.QLabel(open_text)
self.lst = QtWidgets.QListWidget()
self.lst.addItems([str(i) for i in list_of_items])
add = QtWidgets.QPushButton('Add', clicked=self.add_button)
grid = QtWidgets.QGridLayout(self)
grid.setSpacing(10)
grid.addWidget(open_message)
grid.addWidget(self.lst)
grid.addWidget(add)
def add_button(self):
input_box = InputBox()
input_box.setWindowTitle("Window 2")
if input_box.exec_() == QtWidgets.QDialog.Accepted:
val = input_box.save()
it = QtWidgets.QListWidgetItem(val)
self.lst.addItem(it)
self.lst.scrollToItem(it)
StyleSheet = """
QScrollBar:vertical {
border: none;
background: white;
width: 5px;
margin: 0px 0px 0px 0px;
min-height: 0px;
}
QScrollBar::handle:vertical {
background: qlineargradient(x1:0, y1:0, x2:1, y2:0,
stop: 0 rgb(32, 47, 130), stop: 0.5 rgb(32, 47, 130), stop:1 rgb(32, 47, 130));
min-height: 0px;
}
QScrollBar::add-line:vertical {
background: qlineargradient(x1:0, y1:0, x2:1, y2:0,
stop: 0 rgb(32, 47, 130), stop: 0.5 rgb(32, 47, 130), stop:1 rgb(32, 47, 130));
height: 0px;
subcontrol-position: bottom;
subcontrol-origin: margin;
}
QScrollBar::sub-line:vertical {
background: qlineargradient(x1:0, y1:0, x2:1, y2:0,
stop: 0 rgb(32, 47, 130), stop: 0.5 rgb(32, 47, 130), stop:1 rgb(32, 47, 130));
height: 0 px;
subcontrol-position: top;
subcontrol-origin: margin;
}
"""
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyleSheet(StyleSheet)
window = ListForm(list(range(20)), "List of Values")
window.setWindowTitle('Window 1')
window.show()
sys.exit(app.exec_())

