PyQt5 动态添加带有循环的小部件

PyQt5 add widgets with a loop dynamically

我正在尝试编写一个简单的程序来显示 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 中动态添加小部件吗?还是我也应该使网格动态化? 谢谢

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

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

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