pyqt5 QScrollArea组件

本示例中,演示了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_())

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要制作垂直轮动组件,可以使用Qt自带的QScrollBar和QScrollArea组件。 首先,在Qt Designer中创建一个QScrollArea,并将垂直滚动条的范围设置为0到1。然后将一个QWidget作为QScrollArea组件,将其大小设置为QScrollArea的大小。 接下来,创建一个QVBoxLayout并将其设置为QWidget的布局管理器。在QVBoxLayout中添加需要显示的所有结果控件,并设置它们的大小和位置。要让结果控件能够滚动,可以将它们添加到一个QWidget中,并将该QWidget设置为QVBoxLayout的组件。 最后,将QWidget添加到QScrollArea中,并将QScrollArea设置为垂直滚动条的父组件。 在代码中,可以使用以下方式创建并显示垂直轮动组件: ```python from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QScrollArea, QScrollBar app = QApplication([]) window = QWidget() # Create scroll area scroll = QScrollArea() scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) scroll.setWidgetResizable(True) scroll.setFixedWidth(400) scroll.setFixedHeight(200) # Create widget and layout widget = QWidget() layout = QVBoxLayout(widget) layout.setContentsMargins(0, 0, 0, 0) # Add labels to layout for i in range(20): label = QLabel('Result {}'.format(i)) layout.addWidget(label) # Add widget to scroll area scroll.setWidget(widget) # Add scroll area to window layout = QVBoxLayout(window) layout.addWidget(scroll) window.show() app.exec_() ``` 这样就可以创建一个垂直滚动的组件,并在其中显示所有结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值