Пропадают края при использовании border-radius в QScrollArea

Пропадают края при использовании border-radius в QScrollArea.

Помогите с решением проблемы.

from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
    QFont, QFontDatabase, QGradient, QIcon,
    QImage, QKeySequence, QLinearGradient, QPainter,
    QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QGridLayout, QMainWindow, QScrollArea,
    QSizePolicy, QWidget)
import sys

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(440, 265)
        MainWindow.setStyleSheet(u"QScrollArea {\n"
"   border: 1.5px solid black;\n"
"   border-radius: 10px;\n"
"}")
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.gridLayout = QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName(u"gridLayout")
        self.scrollArea = QScrollArea(self.centralwidget)
        self.scrollArea.setObjectName(u"scrollArea")
        self.scrollArea.setWidgetResizable(True)
        self.scrollAreaWidgetContents = QWidget()
        self.scrollAreaWidgetContents.setObjectName(u"scrollAreaWidgetContents")
        self.scrollAreaWidgetContents.setGeometry(QRect(0, 0, 418, 243))
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)

        self.gridLayout.addWidget(self.scrollArea, 0, 0, 1, 1)

        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
    # retranslateUi

class Test(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(Test, self).__init__()
        self.setupUi(self)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Test()
    window.show()
    sys.exit(app.exec())

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

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

Я прокомментировал ваш код, проверьте.

import sys
'''
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
    QFont, QFontDatabase, QGradient, QIcon,
    QImage, QKeySequence, QLinearGradient, QPainter,
    QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QGridLayout, QMainWindow, QScrollArea,
    QSizePolicy, QWidget)
'''
from PyQt5.Qt import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(440, 265)
        ''' убираем
        MainWindow.setStyleSheet(u"QScrollArea {\n"
"   border: 5px solid black;\n"
"   border-radius: 10px;\n"
"   background-color: #F00;\n"
"}")    
        '''
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        
# уберите, это для понимания vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
        self.centralwidget.setStyleSheet("#centralwidget {background-color: #d88abf;}") 
        
        self.gridLayout = QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName(u"gridLayout")
        self.scrollArea = QScrollArea(self.centralwidget)
        self.scrollArea.setObjectName(u"scrollArea")
        
        self.scrollArea.setWidgetResizable(True)
        self.scrollAreaWidgetContents = QWidget()
        self.scrollAreaWidgetContents.setObjectName(u"scrollAreaWidgetContents")
        self.scrollAreaWidgetContents.setGeometry(QRect(0, 0, 418, 243))
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv        
        self.scrollAreaWidgetContents.setStyleSheet("""
            #scrollAreaWidgetContents {
                background-color: #d8a38a;
                border: 1.5px solid blue;
                border-radius: 30px;                     /* <---- установите 10 */
            }
        """)
        self.scrollArea.setStyleSheet("""
            #scrollArea {
                border: none;
                background-color: #0f0;     /* <---- уберите, это для понимания*/
            }
        """)
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

        self.gridLayout.addWidget(self.scrollArea, 0, 0, 1, 1)

        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))


class Test(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(Test, self).__init__()
        self.setupUi(self)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Test()
    window.show()
    sys.exit(app.exec())

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

→ Ссылка
Автор решения: S. Nick

Попробуйте так:

import sys
'''
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
    QFont, QFontDatabase, QGradient, QIcon,
    QImage, QKeySequence, QLinearGradient, QPainter,
    QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QGridLayout, QMainWindow, QScrollArea,
    QSizePolicy, QWidget)
'''
from PyQt5.Qt import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(440, 265)
        
        MainWindow.setStyleSheet(u"QScrollArea {\n"
"   border: 3px solid black;\n"
"   border-radius: 10px;\n"
"   background-color: #d8a38a;\n"
"}")    
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.gridLayout = QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName(u"gridLayout")
        self.scrollArea = QScrollArea(self.centralwidget)
        self.scrollArea.setObjectName(u"scrollArea")
        
        self.scrollArea.setWidgetResizable(True)
        self.scrollAreaWidgetContents = QWidget()
        self.scrollAreaWidgetContents.setObjectName(u"scrollAreaWidgetContents")
        self.scrollAreaWidgetContents.setGeometry(QRect(0, 0, 418, 243))
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.gridLayout.addWidget(self.scrollArea, 0, 0, 1, 1)

        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))


class Test(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(Test, self).__init__()
        self.setupUi(self)
        
        layout = QGridLayout(self.scrollAreaWidgetContents)
        label = QLabel(alignment=Qt.AlignCenter)  
        label.setPixmap(QPixmap("Ok.png"))    
        layout.addWidget(label)


StyleSheet = """
#centralwidget {
    background-color: #d88abf;
}

#scrollAreaWidgetContents {
    background-color: #d8a38a;
    border: 0px solid blue;
    border-radius: 10px; 
    margin: 5px 5px 5px 5px;    
}              

QScrollBar:vertical {              
    border: none;     
    background: #d8a38a;
    width: 5px;               
    margin: 5px 0px 5px 0px;
    min-height: 0px;
}
QScrollBar::handle:vertical {
    background: #4a33ae;
    min-height: 0px;
    border-radius: 2px;
}
QScrollBar::add-line:vertical {
    background: #4a33ae;
    height: 0px;
    subcontrol-position: bottom;
    subcontrol-origin: margin;
}
QScrollBar::sub-line:vertical {
    background: #4a33ae;
    height: 0 px;
    subcontrol-position: top;
    subcontrol-origin: margin;
}

QScrollBar:horizontal {              
    border: none;     
    background: #d8a38a;
    height: 5px;               
    margin: 0px 5px 0px 5px;
    min-height: 0px;
}
QScrollBar::handle:horizontal {
    background: #4a33ae;
    min-height: 0px;
    border-radius: 2px;
}
QScrollBar::add-line:horizontal {
    background: #4a33ae;
    height: 0px;
    subcontrol-position: bottom;
    subcontrol-origin: margin;
}
QScrollBar::sub-line:horizontal {
    background: #4a33ae;
    height: 0 px;
    subcontrol-position: top;
    subcontrol-origin: margin;
}
"""


if __name__ == "__main__":
    app = QApplication(sys.argv)
    
    app.setStyleSheet(StyleSheet)
    
    window = Test()
    window.show()
    sys.exit(app.exec())

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

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


Ok.png

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

→ Ссылка