2017-10-22 3 views
0

Ich versuche, ein einfaches Programm zu schreiben, das PC-Laufwerke Informationen wie Brief zugewiesen, Gesamtspeicher in GB etc. Da jeder eine andere Anzahl von Laufwerken hat, muss dies dynamisch sein. Ich benutze PyQt5 für GUI. Ich versuche, Buchstaben meiner Laufwerke anzuzeigen, aber ich kann nicht in der Lage sein dynamisch neue Widgets hinzuzufügen, ich bekomme immer nur den letzten Buchstaben. So sieht es jetzt aus. Zuerst habe ich Setup ein Raster:PyQt5 hinzufügen Widgets mit einer Schleife dynamisch

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") 

Dann versuche ich die Anzahl der Laufwerke neue Label-Widgets hinzufügen abhängig:

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

Mit dem obigen Code alles, was ich angezeigt bekommen, ist das letzte Buchstabe des Laufwerks (E :). Ich denke ich verstehe, dass ich nicht alle DRIVELETTERSPACE nennen sollte, aber wie kann ich dann die Namen dynamisch machen? Kann ich auch Widgets in pyqt5 dynamisch hinzufügen? Oder sollte ich das Netz auch dynamisieren? Danke.

+1

versuchen mit 'key = 0 für Datenträger in disksInfo: DRIVELETTERSPACE = QtWidgets.QLabel (self.gridLayoutWidget_3) DRIVELETTERSPACE.setObjectName ("DRIVELETTERSPACE") DrivesData.addWidget (self.DRIVELETTERSPACE, Schlüssel, 0) Taste + = 1' – eyllanesc

+0

Sie müssen das Widget zu einer anderen Zeile und Spalte hinzufügen, außerdem verwenden Sie nicht self für eine Variable, die in einer Schleife aktualisiert wird, da dies die vorherigen Daten beseitigen könnte. – eyllanesc

+0

Dies scheint zu funktionieren. Ich denke, ich muss auch einen dynamischen Namen vergeben. Irgendeine Idee, wie das gemacht werden könnte (ich werde es jetzt versuchen). – davidb

Antwort

0

In Ihrem Code haben Sie 2 Fehler, der erste Fall ist, dass Sie das Widget an der gleichen Position für Sie hinzufügen, müssen Sie eine Methode erstellen, um die Indizes variieren zu können; der andere Fehler ist ein Mitglied der Klasse als Iterator zu erstellen, für das Sie gerade selbst löschen, zum Beispiel:

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

Wenn Sie das Widget ist es ratsam, zu speichern, um sie in einer Liste oder einem Wörterbuch speichern möchten, da später können wir sie durch einen Index oder Schlüssel erhalten.

Verwandte Themen