在 PyQt5/Pyside2 中动态添加小部件到流布局

Posted

技术标签:

【中文标题】在 PyQt5/Pyside2 中动态添加小部件到流布局【英文标题】:Dynamically adding widget to flow layout in PyQt5/Pyside2 【发布时间】:2020-06-22 11:06:52 【问题描述】:

我正在尝试将小部件添加到此流布局中,类似于 github page 中的小部件。 布局完美无缺,但我想做的是根据先前创建的列表将小部件添加到此布局中。必须为列表中的每个项目添加一个小部件,并且它的属性是根据其他列表设置的。代码如下:

class Win(QWidget):
    def __init__(self):
        super(Win, self).__init__()

        li = ['1', '2', '3', '4']
        texts = ['bowser', 'mewow', 'girk', 'huaa']
        height = [30, 20, 100, 40]
        width = [40, 20, 50, 120]
        color = ['blue', 'red', 'green', 'yellow']
        label = QLabel()
        label.setObjectName('label')
        flowLayout = FlowLayout()

        for t in texts:
            label.setText(t)
            print(t)

        for h in height:
            label.setFixedHeight(h)
            print(h)

        for w in width:
            label.setFixedWidth(w)
            print(w)

        for c in color:
            label.setStyleSheet("background:" + c + ";")
            print(c)

        for item in li:
            flowLayout.addWidget(label)
            print(item)

        self.setLayout(flowLayout)

这不起作用,它只是添加了一次小部件,但似乎在添加的小部件之前留出了空间,就像它为其他小部件保留一样。是 for 循环还是布局?

【问题讨论】:

【参考方案1】:

我认为你最终会制作一个标签。

至少,你应该这样写吗? 我想比较一下区别。

class Win(QtWidgets.QWidget):
    def __init__(self):
        super(Win, self).__init__()

        li = ['1', '2', '3', '4']
        texts = ['bowser', 'mewow', 'girk', 'huaa']
        height = [30, 20, 100, 40]
        width = [40, 20, 50, 120]
        color = ['blue', 'red', 'green', 'yellow']
        label = QtWidgets.QLabel()
        label.setObjectName('label')
        flowLayout = FlowLayout()
        for l in range(len(li)):
            label = QtWidgets.QLabel()
            label.setObjectName('label0'.format(l))               
            label.setText(texts[l])             
            label.setFixedHeight(height[l])                
            label.setFixedWidth(width[l])    
            label.setStyleSheet("background:" + color[l] + ";")       
            flowLayout.addWidget(label)   
        self.setLayout(flowLayout)

【讨论】:

以上是关于在 PyQt5/Pyside2 中动态添加小部件到流布局的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 - 动态添加小部件到布局

如何将小部件动态添加到网格?

如何将 Dijit 小部件动态添加到 Dojo 表单?

在颤动中动态地将小部件添加到列的子项

将项目动态添加到列表小部件

QTableView 在 PyQt5/PySide2 中的每个选择上加载数据时锁定主窗体 [重复]