PyQt5动态添加一个循环的小部件

时间:2017-10-22 13:27:27

标签: python pyqt pyqt5 qwidget

我试图编写一个简单的程序来显示pc驱动器信息,如字母分配,GB内存总量等。 由于每个人都有不同数量的驱动器,因此必须是动态的。我正在使用PyQt5进行GUI。 我正在尝试显示我的驱动器的字母,但我似乎无法动态添加新的小部件,我总是只得到最后一个字母。 这是现在的样子。 首先我设置一个网格:

self.gridLayoutWidget_3 = QtWidgets.QWidget(self.centralwidget)
self.gridLayoutWidget_3.setGeometry(QtCore.QRect(10, 210, 741, 71))
self.gridLayoutWidget_3.setObjectName("gridLayoutWidget_3")
self.DrivesData = QtWidgets.QGridLayout(self.gridLayoutWidget_3)
self.DrivesData.setContentsMargins(0, 0, 0, 0)
self.DrivesData.setObjectName("DrivesData")

然后我尝试根据驱动器的数量添加新的标签小部件:

for disk in disksInfo:
    self.DRIVELETTERSPACE = QtWidgets.QLabel(self.gridLayoutWidget_3)
    self.DRIVELETTERSPACE.setObjectName("DRIVELETTERSPACE")
    self.DrivesData.addWidget(self.DRIVELETTERSPACE, 1, 0, 1, 1)

使用上面的代码,我显示的是最后一个驱动器的字母(E :)。 我想我明白我不应该把它们全部命名为DRIVELETTERSPACE但是我怎样才能让名字变得动态呢? 另外,这是我如何在pyqt5中动态添加小部件?或者我应该使网格动态吗? 感谢。

1 个答案:

答案 0 :(得分:0)

在您的代码中,您有2个错误,第一种情况是您要将窗口小部件添加到相同位置,您必须创建一些方法才能更改索引;另一个错误是创建类的成员作为迭代器,为此您只需删除self,例如:

key = 0 
for disk in disksInfo: 
    DRIVELETTERSPACE = QtWidgets.QLabel(self.gridLayoutWidget_3) 
    DRIVELETTERSPACE.setObjectName("DRIVELETTERSPACE") 
    DrivesData.addWidget(DRIVELETTERSPACE, key, 0) 
    key += 1

如果你想保存小部件,建议将它们保存在列表或字典中,因为以后我们可以分别通过索引或密钥获取它们。