Скругление углов выпадающего списка 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())