【问题标题】:Trouble populating a QGridLayout填充 QGridLayout 时遇到问题
【发布时间】:2022-01-04 19:44:09
【问题描述】:

我真的不明白为什么 widget_2 和 widget_3 在这个网格布局中只出现一次,它们应该像“widget_1”(QLabel)一样出现 5 次(例如)。我正在使用 for 循环和 zip() 函数来填充这个网格布局,其中包含在名为“linha”的列表中的元组内生成的小部件,我得到的结果是这样的:

我知道如果我喜欢:

linha = [(QLabel("anything goes"), QspinBox(), QComboBox() for i in range(5)]

它会起作用,但问题是我需要小部件 2 和 3 作为 MRE 呈现的类属性。如果您知道如何帮助我或有任何想法来改进此代码,请与我们分享,您将让我开心

这是一个 MRE,您可以根据需要复制和粘贴以运行

import sys
from PyQt5.QtWidgets import (QWidget, QApplication, QGridLayout,
                             QSpinBox, QComboBox, QVBoxLayout, QLabel)

class example(QWidget):

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

        self.grid_layout_test()

    def grid_layout_test(self):

        layout = QVBoxLayout()
        self.widget_2 = QSpinBox()
        self.widget_3 = QComboBox()
        self.grid_layout = QGridLayout()

        lst = []

        opts = ['a', 'b', 'c', 'd', 'e']

        [self.widget_3.addItem(opt) for opt in opts]

        linha = [(QLabel("N°: " + str(i + 1)), self.widget_2, self.widget_3) for i in range(5)]
        posicoes = [(i, j) for i in range(5) for j in range(3)]

        for widgets in linha:
            for widget in widgets:
                lst.append(widget)

        for pos, ele in zip(posicoes, lst):
            self.grid_layout.addWidget(ele, *pos)

        layout.addLayout(self.grid_layout)
        self.setLayout(layout)


def main():

    app = QApplication(sys.argv)
    run = example()
    run.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

【问题讨论】:

    标签: python pyqt pyqt5 qgridlayout


    【解决方案1】:

    我真的不明白为什么 widget_2 和 widget_3 在这个网格布局中只出现一次

    因为您只创建了一个 QSpinBox 和 QComboBox,所以您只是在复制引用,而在 QGridLayout 的情况下,如果小部件已被处理,那么它不会移动它或创建副本,我认为这就是您想要的但这不是 Qt 的工作方式。

    类似于您有 2 本书(小部件)并将其放在壁橱中(类似于布局),并且您认为将它们放在另一个盒子中意味着将创建新的副本。

    【讨论】:

    • 晚安@eyllanesc,嗯,我明白了……我的思路实际上是朝那个方向发展的,所以我在尝试其他方法之前寻求确认。感谢您的知识,我设法按照我想要的方式将它们组合在一起。我的解决方法有点“奇怪”但功能强大,所以谢谢你的线索!!
    猜你喜欢
    • 2011-05-22
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 2015-06-16
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    相关资源
    最近更新 更多