本示例中,演示了QScrollArea的使用,以及QScrollBar的样式设定,水平跟垂直滚动条同时进行了设定。
效果图:
源代码:
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QScrollArea
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(644, 488)
self.verticalLayout = QtWidgets.QVBoxLayout(Form)
self.verticalLayout.setObjectName("verticalLayout")
self.scrollArea = QtWidgets.QScrollArea(Form)
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName("scrollArea")
self.scrollAreaWidgetContents = QtWidgets.QWidget()
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 624, 468))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.pushButton = QtWidgets.QPushButton(self.scrollAreaWidgetContents)
self.pushButton.setObjectName("pushButton")
self.verticalLayout_2.addWidget(self.pushButton)
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
self.verticalLayout.addWidget(self.scrollArea)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.pushButton.setText(_translate("Form", "PushButton"))
class DEMO(QDialog, Ui_Form):
def __init__(self):
super(DEMO, self).__init__()
self.setupUi(self)
self.resize(955, 625)
for x in range(30):
self.scrollAreaWidgetContents.layout().addWidget(QPushButton(f'Button{x}'))
self.scrollAreaWidgetContents.layout().setContentsMargins(5, 5, 5, 5)
self.verticalLayout.setContentsMargins(6, 6, 6, 6)
self.scrollArea.setWidgetResizable(True)
self.setStyleSheet("""
QDialog {
background-color: #ced5ef;
}
QScrollArea {
border: none;
border-radius: 6px;
padding: 2px;
background-color: #ffffff;
}
#scrollAreaWidgetContents
{
background-color: rgb(255,255,255,0);
}
QScrollBar {
border: 1px solid #999999;
background: #E2E2E2;
background-color: #FDFDFD;
width: 10px;
height: 10px;
padding: 1px;
margin: 0px;
border-radius: 5px;
}
QScrollBar:hover{
border-color: #8BF;
}
QScrollBar::handle {
border-radius: 3px;
background: #0B6678;
min-width: 16px;
min-height: 16px;
}
QScrollBar::handle:hover {
background: #EA2;
}
QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical
{
width: 0px;
height: 0px;
}
QScrollBar::add-line, QScrollBar::sub-line,
QScrollBar::add-page, QScrollBar::sub-page {
width: 0px;
background: transparent;
}
""")
if __name__ == '__main__':
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps)
QGuiApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
app = QApplication(sys.argv)
main_win = DEMO()
main_win.show()
sys.exit(app.exec_())