【发布时间】: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