PyQt6 QScrollBar видно края, скругление
Проблема с QListWidget при использовании PyQt6.
Когда я задаю ему стиль и обновляю окно (при смене языка) появляются вот такие черные уголки. До обновления окна их нет.
Еще есть этот неприятный правый нижний угол, его нужно скруглить.
Файлы скрыты в целях безопасности. Могу я сделать задний фон ползунков не в цвет заднего фона QListWidget, а прозрачным?
Вот StyleSheet, который я использую:
QListWidget QScrollBar:vertical {
background-color: #F0FFFF;
width: 20px;
border: 0px transparent;
border-radius: 10px;
}
QListWidget QScrollBar::handle:vertical {
background-color: #6BCCCC;
min-height: 40px;
border-radius: 10px;
}
QListWidget QScrollBar::sub-line:vertical {
height: 0px;
width: 0px;
subcontrol-position: top;
subcontrol-origin: margin;
}
QListWidget QScrollBar::add-line:vertical {
height: 0px;
width: 0px;
subcontrol-position: bottom;
subcontrol-origin: margin;
}
QListWidget QScrollBar::sub-line:vertical:hover,QScrollBar::sub-line:vertical:on {
height: 0px;
width: 0px;
subcontrol-position: top;
subcontrol-origin: margin;
}
QListWidget QScrollBar::add-line:vertical:hover, QScrollBar::add-line:vertical:on {
height: 0px;
width: 0px;
subcontrol-position: bottom;
subcontrol-origin: margin;
}
QListWidget QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {
background: none;
}
QListWidget QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
background: none;
}
QListWidget QScrollBar:horizontal {
background: transparent;
background-color: #F0FFFF;
height: 20px;
border: 0px transparent;
border-radius: 10px;
}
QListWidget QScrollBar::handle:horizontal {
background-color: #6BCCCC;
min-width: 40px;
border-radius: 10px;
}
QListWidget QScrollBar::sub-line:horizontal {
height: 0px;
width: 0px;
subcontrol-position: right;
subcontrol-origin: margin;
}
QListWidget QScrollBar::add-line:horizontal {
height: 0px;
width: 0px;
subcontrol-position: left;
subcontrol-origin: margin;
}
QListWidget QScrollBar::sub-line:horizontal:hover,QScrollBar::sub-line:horizontal:on {
height: 0px;
width: 0px;
subcontrol-position: right;
subcontrol-origin: margin;
}
QListWidget QScrollBar::add-line:horizontal:hover, QScrollBar::add-line:horizontal:on {
height: 0px;
width: 0px;
subcontrol-position: left;
subcontrol-origin: margin;
}
QListWidget QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal {
background: none;
}
QListWidget QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
background: none;
}
QListWidget {background-color: #F0FFFF; color: #323232; border-radius: 10px;}
Заранее спасибо за помощь!
P.S. Да, я знаю, что все криво написано. Я только начинаю, так что не ругайтесь там на меня сильно
Ответы (1 шт):
Пожалуйста, ВСЕГДА предоставляйте минимально-воспроизводимый пример, который демонстрирует проблему.
Мне не очень нравится что вы объединяете QListWidget QScrollBar:vertical {}.
Я не анализировал ваше написание стилей, а интуитивно добавил одну строку:
margin: 0px 0px 0px 0px;
и вот что у меня получилось:
Обратите внимание, что у меня PyQt5. Поменяйте импорты, если у вас что-то другое.
import sys
import string
from PyQt5 import QtCore, QtGui, QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.centralwidget = QtWidgets.QWidget()
self.centralwidget.setObjectName("centralwidget")
self.setCentralWidget(self.centralwidget)
self.listWidget = QtWidgets.QListWidget()
options = list(string.ascii_letters)
self.listWidget.addItems(options)
layout = QtWidgets.QVBoxLayout(self.centralwidget)
layout.addWidget(self.listWidget)
QSS = '''
#centralwidget {
background-color: #A52A2A;
}
QListWidget QScrollBar:vertical {
background-color: #F0FFFF;
width: 20px;
border: 0px transparent;
border-radius: 10px;
margin: 0px 0px 0px 0px; /* <-------------------------------- */
}
QListWidget QScrollBar::handle:vertical {
background-color: #6BCCCC;
min-height: 40px;
border-radius: 10px;
}
QListWidget QScrollBar::sub-line:vertical {
height: 0px;
width: 0px;
subcontrol-position: top;
subcontrol-origin: margin;
}
QListWidget QScrollBar::add-line:vertical {
height: 0px;
width: 0px;
subcontrol-position: bottom;
subcontrol-origin: margin;
}
QListWidget QScrollBar::sub-line:vertical:hover,QScrollBar::sub-line:vertical:on {
height: 0px;
width: 0px;
subcontrol-position: top;
subcontrol-origin: margin;
}
QListWidget QScrollBar::add-line:vertical:hover, QScrollBar::add-line:vertical:on {
height: 0px;
width: 0px;
subcontrol-position: bottom;
subcontrol-origin: margin;
}
QListWidget QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {
background: none;
}
QListWidget QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
background: none;
}
QListWidget QScrollBar:horizontal {
background: transparent;
background-color: #F0FFFF;
height: 20px;
border: 0px transparent;
border-radius: 10px;
}
QListWidget QScrollBar::handle:horizontal {
background-color: #6BCCCC;
min-width: 40px;
border-radius: 10px;
}
QListWidget QScrollBar::sub-line:horizontal {
height: 0px;
width: 0px;
subcontrol-position: right;
subcontrol-origin: margin;
}
QListWidget QScrollBar::add-line:horizontal {
height: 0px;
width: 0px;
subcontrol-position: left;
subcontrol-origin: margin;
}
QListWidget QScrollBar::sub-line:horizontal:hover,QScrollBar::sub-line:horizontal:on {
height: 0px;
width: 0px;
subcontrol-position: right;
subcontrol-origin: margin;
}
QListWidget QScrollBar::add-line:horizontal:hover, QScrollBar::add-line:horizontal:on {
height: 0px;
width: 0px;
subcontrol-position: left;
subcontrol-origin: margin;
}
QListWidget QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal {
background: none;
}
QListWidget QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
background: none;
}
QListWidget {background-color: #F0FFFF; color: #323232; border-radius: 10px;}
'''
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
app.setStyleSheet(QSS) # +++
w = MainWindow()
w.show()
sys.exit(app.exec())

