首先,这是我的代码:
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。我想添加滚动条,以便这些框架显示在此栏区域内。因此,对于我在前两个或三个之后添加的每个帧,我希望它们在我向下滚动时显示。我已经尝试在这里搜索,但没有什么对我有用。也许我错过了什么,我真的不知道。
感谢所有人的期待。
答案 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
`