m0_55677094 2023-03-10 16:38 采纳率: 85.7%
浏览 25
已结题

Pyqt中,如何在QScrollArea逐项顺序(比如从上到下)添加QLabel?

如上,请问Pyqt中,如何在QScrollArea逐项顺序添加QLabel?后面添加的标签自动排列在前面的标签后面。
我的想法是,是否有现成的(我还没有查到)方法可以给出滚动区域的标签数量。如果没有这个数量,后面添加的标签始终都是在同一位置覆盖前面的标签。如果有了这个数量,我就可以让后面添加的标签都move到相应的位置。
谢谢!

  • 写回答

2条回答 默认 最新

  • chenshanshan128 2023-03-10 16:51
    关注

    要实现后面添加的标签自动排列在前面的标签后面,可以在每次添加新的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的效果,并且后面添加的标签自动排列在前面的标签后面。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月21日
  • 已采纳回答 3月13日
  • 创建了问题 3月10日