PyQt5 - 无法在我的窗口中添加滚动区域

时间:2017-06-26 15:28:03

标签: python user-interface pyqt pyqt5

首先,这是我的代码:

class UpdateFrame(QtWidgets.QFrame):

    def __init__(self, parent=None):
        super().__init__(parent)

        self.setFixedSize(579, 450)
        self.setStyleSheet('background-color: white;'
                           'border: 1px solid #4f4f51;'
                           'border-radius: 5px;'
                           'margin: 5px;'
                           'padding: 5px;')

        self.setLayout(QtWidgets.QVBoxLayout())

        for i in range (5):
            listFrame = QtWidgets.QFrame()
            listFrame.setStyleSheet('backgrounf-color: white;'
                                    'border: 1px solid #4f4f51;'
                                    'border-radius: 0px;'
                                    'margin: 2px;'
                                    'padding: 2px')
            self.layout().addWidget(listFrame)

到目前为止,此代码仅根据for函数中的数字添加一个Frame。我想添加滚动条,以便这些框架显示在此栏区域内。因此,对于我在前两个或三个之后添加的每个帧,我希望它们在我向下滚动时显示。我已经尝试在这里搜索,但没有什么对我有用。也许我错过了什么,我真的不知道。

感谢所有人的期待。

1 个答案:

答案 0 :(得分:0)

为了做到这一点,我认为你需要有一个"外部"包含QScrollArea的框架或窗口小部件,然后您可以将内部窗口小部件添加到允许滚动的窗口小部件(如果足够大)。我希望下面的例子足以让你开始在任何你想要的地方实现它:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class OuterFrame(QMainWindow):
    def __init__(self, parent=None):
        # Initialize the Main Window
        super(OuterFrame, self).__init__(parent)

        # Spec out the Outer Frame
        self.setFixedSize(579, 450)
        self.setStyleSheet('background-color: white;'
                           'border: 1px solid #4f4f51;'
                           'border-radius: 5px;'
                           'margin: 5px;'
                           'padding: 5px;')

        # Create a Scroll Area in this Frame
        self.scroll_area = QScrollArea()

        # Calling Our Frame Updater
        frameWidget = UpdateFrame(self)

        # Set the frame widget to be part of the scroll area
        self.scroll_area.setWidget(frameWidget)
        self.scroll_area.setWidgetResizable(True)
        self.layout().addWidget(self.scroll_area)

class UpdateFrame(QFrame):
    def __init__(self, parent=None):
        super(UpdateFrame, self).__init__(parent)

        layout = QVBoxLayout()
        self.setLayout(layout)

        for i in range(25):
            listFrame = QFrame()
            listFrame.setStyleSheet('background-color: white;'
                                    'border: 1px solid #4f4f51;'
                                    'border-radius: 0px;'
                                    'margin: 2px;'
                                    'padding: 2px')
            listFrame.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
            listFrame.setMinimumSize(QSize(50, 50))

            layout.addWidget(listFrame)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    mainWindow = OuterFrame()
    mainWindow.show()
    sys.exit(app.exec_())  # only need one app, one running event loop
`