【问题标题】:PyQt5 QScrollArea widget with dynamically created GroupBoxes具有动态创建的 GroupBoxes 的 PyQt5 QScrollArea 小部件
【发布时间】:2018-11-27 13:58:13
【问题描述】:

我正在尝试制作一个可以执行各种不同操作的工具箱小部件。但是我在 QScrollArea 的布局管理方面遇到了麻烦。按照我拥有的代码的剥离版本:

from PyQt5 import QtWidgets
import sys


class MyScrollWidget(QtWidgets.QWidget):

    def __init__(self):
        super(MyScrollWidget, self).__init__()

        scrollArea = QtWidgets.QScrollArea(self)
        top_widget = QtWidgets.QWidget()
        top_layout = QtWidgets.QVBoxLayout()
        for i in range(10):
            group_box = QtWidgets.QGroupBox()

            group_box.setTitle('GroupBox For Item {0}'.format(i))

            layout = QtWidgets.QHBoxLayout(group_box)

            label = QtWidgets.QLabel()
            label.setText('Label For Item {0}'.format(i))
            layout.addWidget(label)

            push_button = QtWidgets.QPushButton(group_box)
            push_button.setText('Run Button')
            push_button.setFixedSize(100, 32)
            layout.addWidget(push_button)

            group_box.setLayout(layout)
            top_layout.addWidget(group_box)

        top_widget.setLayout(top_layout)
        scrollArea.setWidget(top_widget)
        self.resize(200, 500)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    widget = MyScrollWidget()
    widget.show()
    sys.exit(app.exec_())

但这只是给了我滚动的小部件的一小部分固定部分。但我真正想要的是,如果小部件/窗口小于所有组框的总大小,则整个小部件都是可滚动的。即我希望小部件被使用,就好像它都是固定宽度一样,但是如果用户将小部件调整得比那个小,它会适当地滚动。我尝试了各种不同的方法,但都没有很好的结果,所以现在我要听从那些比我有更多布局管理经验的人。谢谢你的时间。

【问题讨论】:

    标签: python pyqt pyqt5 qscrollarea qgroupbox


    【解决方案1】:

    您必须使用布局将scrollArea 设置为MyScrollWidget

    from PyQt5 import QtWidgets
    import sys
    
    
    class MyScrollWidget(QtWidgets.QWidget):
    
        def __init__(self):
            super(MyScrollWidget, self).__init__()
            lay = QtWidgets.QVBoxLayout(self)
    
            scrollArea = QtWidgets.QScrollArea()
            lay.addWidget(scrollArea)
            top_widget = QtWidgets.QWidget()
            top_layout = QtWidgets.QVBoxLayout()
    
            for i in range(10):
                group_box = QtWidgets.QGroupBox()
    
                group_box.setTitle('GroupBox For Item {0}'.format(i))
    
                layout = QtWidgets.QHBoxLayout(group_box)
    
                label = QtWidgets.QLabel()
                label.setText('Label For Item {0}'.format(i))
                layout.addWidget(label)
    
                push_button = QtWidgets.QPushButton(group_box)
                push_button.setText('Run Button')
                push_button.setFixedSize(100, 32)
                layout.addWidget(push_button)
    
                top_layout.addWidget(group_box)
    
            top_widget.setLayout(top_layout)
            scrollArea.setWidget(top_widget)
            self.resize(200, 500)
    
    
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        widget = MyScrollWidget()
        widget.show()
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 2018-03-14
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多