QTableWidget - Zeilen Löschen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
NewPython19

Hallo,
ich habe eine QTableWidget die ich während meines Programms befülle.
Durch Betätigen eines QPushButtons möchte ich alle Zeilen löschen.
Mit der Funktion ".clear()" löscht sich bei mir alles, auch die Spaltennamen.
Daher habe ich über eine for-schleife probiert die Zeilen zu löschen:

Code: Alles auswählen

	rows = self.table.rowCount()
	for i in range(rows)
		self.table.remotRow(i)
Allerdings bleibt bei mir immer eine Zeile ungelöscht. Weiß jemand warum und wie man das beheben kann?

Grüße
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Ich bin mir ziemlich sicher, dass der Code gar keine Zeilen löscht.
Und wenn du den zeigst, den du tatsächlich ausführst, schaut sich den sicher auch jemand an.
NewPython19

Sorry da war ein Tippfehler drin aber ansonsten ist das mein Code:

Code: Alles auswählen

rows = self.table.rowCount()
	for i in range(rows)
		self.table.removeRow(i)
Fesker
User
Beiträge: 3
Registriert: Mittwoch 18. September 2019, 10:15

Hallo,
Du musst von hinten anfangen und nach vorne löschen, sonst gehts nicht.

Code: Alles auswählen

def removeRows():
    for row in range(self.tableWidget.rowCount(), 0, -1):
        print('Lösche %d' % (row - 1))
        self.tableWidget.removeRow(row - 1)
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum ziehst Du immer 1 von `row` ab, statt gleich den richtigen Range abzulaufen?

Code: Alles auswählen

def removeRows():
    for row in range(self.tableWidget.rowCount() - 1, -1, -1):
        print('Lösche %d' % row)
        self.tableWidget.removeRow(row)
Das ist aber immer noch schwierig zu verstehen, so dass es einfacher ist, `reversed` zu benutzen:

Code: Alles auswählen

def removeRows():
    for row in reversed(range(self.tableWidget.rowCount())):
        print('Lösche %d' % row)
        self.tableWidget.removeRow(row)
Antworten