Пропадают края при использовании 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



