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
如果要保存小部件,建议将它们保存在列表或字典中,因为稍后我们可以分别通过索引或键获取它们。
我正在尝试编写一个简单的程序来显示 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
如果要保存小部件,建议将它们保存在列表或字典中,因为稍后我们可以分别通过索引或键获取它们。