PyQt6 QScrollBar видно края, скругление

Рейтинг: 1Ответов: 1Опубликовано: 20.03.2023

Проблема с 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())