如上,请问Pyqt中,如何在QScrollArea逐项顺序添加QLabel?后面添加的标签自动排列在前面的标签后面。
我的想法是,是否有现成的(我还没有查到)方法可以给出滚动区域的标签数量。如果没有这个数量,后面添加的标签始终都是在同一位置覆盖前面的标签。如果有了这个数量,我就可以让后面添加的标签都move到相应的位置。
谢谢!
要实现后面添加的标签自动排列在前面的标签后面,可以在每次添加新的QLabel时,将其插入到QVBoxLayout的末尾。
以下是示例代码
python
Copy code
from PyQt5.QtWidgets import QApplication, QMainWindow, QScrollArea, QWidget, QVBoxLayout, QLabel
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建滚动区域
scroll_area = QScrollArea(self)
self.setCentralWidget(scroll_area)
# 创建用于放置QLabel的垂直布局
vbox = QVBoxLayout()
vbox.setAlignment(Qt.AlignTop) # 将垂直布局的对齐方式设置为顶部对齐
vbox.setSpacing(10) # 设置QLabel之间的间距
vbox.setContentsMargins(10, 10, 10, 10) # 设置垂直布局的边距
# 将垂直布局设置为滚动区域的小部件
widget = QWidget()
widget.setLayout(vbox)
scroll_area.setWidget(widget)
# 添加QLabel
for i in range(10):
label = QLabel(f"Label {i}")
vbox.addWidget(label) # 将QLabel添加到垂直布局的末尾
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
在上面的代码中,我们首先创建了一个QScrollArea对象,然后创建了一个垂直布局QVBoxLayout,并将其设置为滚动区域的小部件。在每次添加新的QLabel时,我们使用addWidget()方法将其插入到QVBoxLayout的末尾,从而实现了逐项顺序添加QLabel的效果,并且后面添加的标签自动排列在前面的标签后面。
不知道你这个问题是否已经解决, 如果还没有解决的话: