Скругление углов выпадающего списка QComboBox (PyQt)

Для своего проекта я пытаюсь сделать закругленные углы для выпадающего списка QComboBox, но у меня не получается.
Я попробовал добавить обводку и увидел это:

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


То есть, как будто углы закруглены, но заливка при этом выходит за рамки обводки.

Мой QSS:

QComboBox {
    border-radius: 10px;
    background-color: rgb(0, 0, 0);
    color: white;
    max-width: 150px;
    max-height: 50px;
    font-size: 20px;
    padding-left: 10px;
    border: 1px solid white;
}

QComboBox::drop-down {
    border: none;
}

QComboBox QAbstractItemView {
    background-color: rgb(0, 0, 0);
    color: white;
    border-radius: 10px;
    border: 1px solid white;
    padding: 0px;
    margin: 0px;
}

QComboBox QAbstractItemView::item {
    text-align: center;
    height: 30px;
}

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

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

Это ваш QSS:

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


Это мой QSS:

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


main.py

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


QSS = '''
#container {
    background-color: rgba(24, 70, 93, 255);     
                    /* или #18465d;        */
}

QComboBox {
    font: 18pt Fira Sans Condensed;     
    background-color: #2e2e2e;
    border-top: 0px solid #3e3e3e;
    border-left: 0px solid #3e3e3e;
    border-right: 0px solid #3e3e3e;
    border-bottom: 2px solid #3e3e3e;
    padding: 5%;
    max-height: 30px;
    min-width: 140px;
    color: white;
    selection-background-color: #5e5e5e;
    border-radius: 12px;
}

QComboBox::drop-down {
    border: none;
}

QComboBox::down-arrow {
    image: url(down-arrow.png);
    width: 25px;
    height: 25px;
    border-width: 0px;
    padding-right: 10px;
}

QComboBox::down-arrow:pressed {
    position: relative;
    top: 1px; left: 1px;
}

QComboBox QListView {
    background-color: transparent;  
    outline: 2px solid red;     
    color: white;

/*  попробуйте так:  
    selection-background-color: #18465d; 
    
    или так:
    v v v v v v v v v v v v v v v v v v v v v v */
    selection-background-color: qlineargradient(
        x1:0, y1:0, x2:0, y2:1,
        stop:0 rgba(24, 70, 93, 255), 
        stop:0.1 rgba(24, 70, 93, 255),
        stop:0.2 rgba(24, 70, 93, 255),
        stop:0.3 rgba(0, 155, 255, 255),
        stop:0.4 rgba(0, 200, 255, 255), 
        stop:0.5 rgba(0, 230, 255, 255),
        stop:0.6 rgba(0, 200, 255, 255),
        stop:0.7 rgba(0, 155, 255, 255),
        stop:0.8 rgba(24, 70, 93, 255),
        stop:0.9 rgba(24, 70, 93, 255),
        stop:1 rgba(24, 70, 93, 255)
    );  
    padding: 5%;
    outline-radius: 12px;            
}

QComboBox:editable {
    background-color : red;  
} 
 
QComboBox QAbstractItemView {
    border : 2px solid blue;
    border-radius: 15px;      
}
'''.strip()


class ComboBox(QComboBox):
    def __init__(self):
        super().__init__()
        self.setFocusPolicy(Qt.FocusPolicy.NoFocus)
        self.addItems((' Item 1', ' Item 2', ' Item 3', 
            ' Hello World', ))
        self.setCurrentIndex(1)


class QSSEditor(QPlainTextEdit):
    _shown = False
    
    def __init__(self):
        super().__init__()
        font = QFont()
        font.setFamily('monospace')
        self.document().setDefaultFont(font)

    def sizeHint(self):
        hint = super().sizeHint()
        if self.toPlainText().strip():
            fm = QFontMetrics(self.document().defaultFont())
            width = fm.size(0, self.toPlainText()).width()
            hint.setWidth(int(
                width + self.document().documentMargin() * 2
                + self.frameWidth() * 2
                + self.verticalScrollBar().sizeHint().width()
            ))
        return hint


class QSSPreview(QWidget):
    def __init__(self):
        super().__init__()
        
        self.editor = QSSEditor()

        self.comboBox = ComboBox()  
        
        self.comboBox.view().window().setWindowFlags(         # !!! +++
            QtCore.Qt.Popup | QtCore.Qt.FramelessWindowHint)  # !!! +++
        self.comboBox.view().window().setAttribute(           # !!! +++
            QtCore.Qt.WA_TranslucentBackground)               # !!! +++
        
        self.container = QWidget()
        self.container.setObjectName("container")
        layoutV = QVBoxLayout(self.container)
        layoutV.addWidget(self.comboBox)

        layout = QHBoxLayout(self)
        layout.addWidget(self.editor, 1)
        layout.addWidget(self.container, 1)

        self.editor.textChanged.connect(lambda: 
            self.updateQSS(self.editor.toPlainText()))
        self.editor.setPlainText(QSS)

    def updateQSS(self, qss):
        self.container.setStyleSheet(qss)
        

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = QSSPreview()
    w.resize(600, 400)
    w.show()
    sys.exit(app.exec())
→ Ссылка