Darf man fragen, was die Verrenkungen in "BeerConfig.__init__()" zum Zweck haben? Eine Bibliotheksklasse sollte niemals globale Änderungen zur Folge haben (in diesem Fall die Manipulation des Arbeitsverzeichnisses), zumal du ein paar Zeilen weiter unten doch zeigst, dass du eigentlich weißt, wie man es richtig macht (in dem man absolute Pfade mit "os.path.join()" erzeugt). Außerdem existiert "ConfigParser.read()", so dass du dir den Test auf Existenz auch sparen kannst (der sowieso nicht atomar ist, im schlimmsten Fall leert diese Chose daher die Konfigurationsdatei). Die Ausgabe mit "print" gehört da übrigens ebenfalls nicht hin, Ausgaben aus Bibliotheksklassen sind allenfalls per "logging" ok.
Desweiteren sollte "BeerConfig.beers()" einen Generator zurückgeben, die Liste ist an dieser Stelle schließlich noch nicht nötig. Außerdem würde ich daraus vielleicht eine Eigenschaft und keine Methode machen.
Das Speichern der Konfigurationsdatei hat in "BeerConfig.add_beer()" imho nichts zu suchen, ich würde dafür eine separate Methode erzeugen. Außerdem ist eine Konfigurationsdatei keine Binärdatei, im Mindestens aber solltest du dich für eine der beiden Möglichkeiten entscheiden. Binär speichern und als Text lesen macht Probleme unter Windows. Die Ausnahmebehandlung ist an dieser Stelle imho unelegant, der Einsatz von "ConfigParser.has_section()" würde an dieser Stelle zwei Codezeilen sparen, die keinen Mehrwert bringen und die Lesbarkeit eher verringern.
Im Bezug auf den eigentlichen Fehler solltest du dir in der Beschreibung dieser Eigenschaft mal ganz genau durchlesen, wie die dazugehörigen Getter und Setter wirklich heißen. Für den Aufruf von ".setFixedSize()" in "MainWindow.__init__()" sollte man dich eigentlich hauen , eine vernünftige GUI nutzt Layoutmanagement. Die explizite Konvertierung zu "QString()" in Zeile 25 von "beerconf_gui" ist iirc nicht nötig, allerdings bin ich mir da nicht sicher, dass müsstest du ausprobieren. Die UI-Datei per Konstruktor zu übergeben, ist imho keine gute Idee, die UI ist schließlich elementarer Bestandteil des Objekts und eigentlich keine Sache, die der Nutzer der Klasse konfigurieren sollte. Ich würde den Pfad zur UI-Datei in ein Klassenattribut stecken. Und außerdem einen absoluten Pfad dafür nutzen, nicht immer liegt die UI-Datei im aktuellen Arbeitsverzeichnis. So gesehen ist es reines Glück, dass du "BeerConfig" erst nach dem Laden der UI erzeugst, andersrum knallst nämlich (siehe oben).
Btw, du darfst auch "Schleife" sagen
Ich präsentiere ... den Bierrechner :)
Zuletzt geändert von lunar am Dienstag 26. Mai 2009, 23:13, insgesamt 1-mal geändert.
Danke, ich werde mich wohl mal intensiver mit diesem QTableWidget beschäftigen müssen. Denn Items werden trotzdem nicht anzeigt.
Aber für heute ist erstmal gut...
Code: Alles auswählen
def init_beers(self):
self.beers.setSortingEnabled(False)
for beer in self.beerconfig.beers():
print beer
item = QtGui.QTableWidgetItem(QtCore.QString(beer[0]))
self.beers.setItem(1, 1, item)
self.beers.setSortingEnabled(True)
Naja, du solltest vielleicht jedem Element seine eigene Zeile gönnen Außerdem es ist vielleicht auch erforderlich, dem Widget mittels ".setRowCount()" und ".setColumnCount()" mitzuteilen, wie viele Spalten und Zeilen es denn tatsächlich anzeigen soll.
Vielen Dank für die ganzen Tipps, Lunar. Ich bin jetzt auf eine Liste umgestiegen, da eine Tabelle nicht wirklich das war, was ich wollte.
Mit dem Design hat es bei BeerConf ganz gut geklappt. Bei BeerCalc bin ich allerdings auf Probleme gestoßen, die ich beim besten Willen nicht alleine gelöst bekomme. Und zwar möchte ich, dass die Überschriften einen anderen Abstand zur jeweiligen SpinBox haben als die darunter liegenden Buttons.
Dazu habe ich Überschrift + SpinBox zu einem vertikalen Design zusammengefasst und dieses Design anschließend als weiteres vertikales Design mit dem Button verbunden. Das ganze eben dreimal.
Soweit sieht das auch aus wie gewünscht. Nur wenn ich daraus ein komplettes (tabellarisches) Design für's ganze Fenster machen will, haut er mir einen Riesenabstand zwischen Text und SpinBox rein, obwohl `spacing` auf 0 steht:
Wo liegt hier das Problem?
Archiv mit Dateien
Mit dem Design hat es bei BeerConf ganz gut geklappt. Bei BeerCalc bin ich allerdings auf Probleme gestoßen, die ich beim besten Willen nicht alleine gelöst bekomme. Und zwar möchte ich, dass die Überschriften einen anderen Abstand zur jeweiligen SpinBox haben als die darunter liegenden Buttons.
Dazu habe ich Überschrift + SpinBox zu einem vertikalen Design zusammengefasst und dieses Design anschließend als weiteres vertikales Design mit dem Button verbunden. Das ganze eben dreimal.
Soweit sieht das auch aus wie gewünscht. Nur wenn ich daraus ein komplettes (tabellarisches) Design für's ganze Fenster machen will, haut er mir einen Riesenabstand zwischen Text und SpinBox rein, obwohl `spacing` auf 0 steht:
Wo liegt hier das Problem?
Archiv mit Dateien
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ich glaube das Problem liegt daran, dass halt irgend etwas expandiert werden muss.
Ich habe mal ein wenig mit Deiner Datei rumgespielt und folgende Muster bekommen:
Letzteres wäre ja evtl. das, was Dir vorschwebt. Allerdings ist es ja eigentlich ziemlich sinnlos, da der untere Teil ja eben expandiert. Da wäre es wohl besser die Vertikale Größe festzusetzen.
Habe grad festgestellt, dass es noch einfacher geht, indem man die Berechnungsgruppen jeweils in ein VerticalLayout steckt und dann den Spacer direkt darunter einfügt. Darauf dann das Tabellarische Layout anwenden und man hat optisch dasselbe Ergebnis wie Screenshot3.
Generell muss man darauf achten, auch bei den Layouts die layoutSize auf setFixedSize zu stellen.
Vielleicht hilft Dir das ja weiter
Ich habe mal ein wenig mit Deiner Datei rumgespielt und folgende Muster bekommen:
Letzteres wäre ja evtl. das, was Dir vorschwebt. Allerdings ist es ja eigentlich ziemlich sinnlos, da der untere Teil ja eben expandiert. Da wäre es wohl besser die Vertikale Größe festzusetzen.
Habe grad festgestellt, dass es noch einfacher geht, indem man die Berechnungsgruppen jeweils in ein VerticalLayout steckt und dann den Spacer direkt darunter einfügt. Darauf dann das Tabellarische Layout anwenden und man hat optisch dasselbe Ergebnis wie Screenshot3.
Generell muss man darauf achten, auch bei den Layouts die layoutSize auf setFixedSize zu stellen.
Vielleicht hilft Dir das ja weiter
Naja, um den Platz unten geht's mir nicht. Eigentlich sollen sich nur die Buttons horizontal und vertikal vergrößern dürfen, denn alles andere sieht IMHO erst recht schrecklich aus, wenn sich die Höhe verändert. Daher ja anfangs meine FixedSize-Einstellung, die aber offenbar nicht gern gesehen wird. Nur mit großen Buttons sieht das Design aber auch nicht wirklich toll aus. GUIs erstellen macht keinen Spass.
Kam gerade über den Äther (wenn auch nicht alkoholfrei)Leonidas hat geschrieben:Alkoholfreies Bier mit Koffein?! Das geht ja mal gar nicht!
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Es geht um Cola ihr Eimer
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Irgendwo fehlt da noch ein Promille-Rechner, der einen warnt, sobald man die Grenze von 2 Maß überschritten hat, ab der man nicht mehr Auto fahren darf...
Das wäre dann wohl der "Beckstein-Button"birkenfeld hat geschrieben:Irgendwo fehlt da noch ein Promille-Rechner, der einen warnt, sobald man die Grenze von 2 Maß überschritten hat, ab der man nicht mehr Auto fahren darf...
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Dann leuchtet der Button auf, dass man nun zur Wahl gehen kann.birkenfeld hat geschrieben:Irgendwo fehlt da noch ein Promille-Rechner, der einen warnt, sobald man die Grenze von 2 Maß überschritten hat, ab der man nicht mehr Auto fahren darf...
quer-Seher wissen was ich meine...
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice