QTableWidget Daten Lesen und Pruefen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Peter1977
User
Beiträge: 86
Registriert: Mittwoch 4. September 2013, 14:59

Hallo

In eine QTableWidget mit 9 Spalten und 9 Zeilen werden Daten hinein geschrieben
Dabei können alle 9 Zeilen oder nur 1 Zeile mit Daten belegt sein aber es müssen immer alle 9 Spalten mit Daten gefüllt werden

Das auslesen ist jetzt kein großes Problem
Das wird im Moment mit einer For Schleife erledigt
jede Zelle wird in eine Variable geschrieben.

Code: Alles auswählen

            for Zeile in range(0,9,1):
                Auftrag= self.tbl_schleifen.item(Zeile,0).text()
                Position= self.tbl_schleifen.item(Zeile,1).text()
                Stk= self.tbl_schleifen.item(Zeile,2).text()
                LaengeRoh= self.tbl_schleifen.item(Zeile,3).text()
                LaengeFertig= self.tbl_schleifen.item(Zeile,4).text()
                BreiteRoh= self.tbl_schleifen.item(Zeile,5).text()
                BreiteFertig= self.tbl_schleifen.item(Zeile,6).text()
                HoeheRoh= self.tbl_schleifen.item(Zeile,7).text()
                HoeheFertig= self.tbl_schleifen.item(Zeile,8).text()
jetzt muss das noch geprüft werden
1. Alle felder müssen gefüllt sein wenn keine gefüllt dann ist es egal
2. Laenge Roh muss größer gleich LaengeFertig sein ebenso BreiteRoh >= BreiteFertig und HoeheRoh => HoeheFertig

wie kann ich jetzt 1 und 2 sehr elegant lösen?

zu Punkt 1 fällt mir nur ein

Code: Alles auswählen

if len(Auftrag)>0 and len(Position)>0 and len(Stk)>0 and ..... 
danach eine Einzelne Prüfung ob ein Feld vielleicht doch gefüllt ist
und zu 2
und danach die Einzelnen Längen Prüfen
if LaengeRoh<LaengeFertig = Fehler

mfg Peter
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@Peter1977: Punkt 1 solltest Du in einer Schleife machen. Punkt zwei sind ja nur 3 Bedingungen, die ich nicht extra noch verallgemeinern würde. Die passende Datenstruktur wäre wohl ein NamedTuple.
BlackJack

@Peter1977: Man sollte möglichst wenige ”magische” Zahlen hart kodieren. Die Zahl der Schleifendurchläufe hängt von der Anzahl der Zeilen in der GUI ab, also wäre es besser das auch entsprechend zu formulieren und ``self.tbl_schleifen.rowCount()`` statt 9 verwenden. Die Schrittweite bei `range()` ist per Voreinstellung schon 1 und den Startwert 0 kann man auch weg lassen.

Eine Typprüfung beziehungsweise das Umwandeln in Zahlen fehlt auch noch, denn das meiste dürfte wohl kein Text sein.

Da bei Zeichenketten alle mit der Länge 0 ”falsch” sind und alle anderen ”wahr”, ist ``if len(string) > 0:`` ziemlich umständlich für ``if string:``.
Antworten