Ich präsentiere ... den Bierrechner :)

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
lunar

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 ;)
Zuletzt geändert von lunar am Dienstag 26. Mai 2009, 23:13, insgesamt 1-mal geändert.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Danke, ich werde mich wohl mal intensiver mit diesem QTableWidget beschäftigen müssen. Denn Items werden trotzdem nicht anzeigt. :(

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)
Aber für heute ist erstmal gut...
lunar

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.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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:

Bild

Wo liegt hier das Problem?

Archiv mit Dateien
Benutzeravatar
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:

Bild

Bild

Bild

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 :-)
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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. :(
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Leonidas hat geschrieben:Alkoholfreies Bier mit Koffein?! Das geht ja mal gar nicht! :twisted:
Kam gerade über den Äther (wenn auch nicht alkoholfrei)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Es geht um Cola ihr Eimer :P :roll:
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Sei mal 'n bisschen flexibel! ;)
Benutzeravatar
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...
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
lunar

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...
Das wäre dann wohl der "Beckstein-Button" ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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...
Dann leuchtet der Button auf, dass man nun zur Wahl gehen kann.

quer-Seher wissen was ich meine...
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Aus Gründen der Gleichberechtigung fordere ich hiermit die Berücksichtigung von Kaffee!

Das "Wie" erkläre ich zum Implementationsdetails :twisted:
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

cofi hat geschrieben:Aus Gründen der Gleichberechtigung fordere ich hiermit die Berücksichtigung von Kaffee!
Auch wenn ich nicht von Ferrero gesponsert werde, aber:

Was ist mit Tee???
Antworten