Hallo,
wie im Titel schon geschrieben, eine Kontaktdatenbank,
welche Sqlite zum speichern und PyQt4 für die Gui nutzt.
Zu finden ist das ganze unter:
http://kontaktdb.berlios.de/
EDIT: Aktuelle Version: 1.0.0.6a vom 26. März 2008
aktuelle Änderungen:
http://kontaktdb.berlios.de/history.html
Vom Umfang her sind es etwas über 500 Zeilen.
Kommentare sind ausdrücklich erwünscht!
EDIT:
Neue Webadresse eingefügt. (27.02.2008)
Version aktualisiert. (18.03.2008)
Aktualisiert(26.03.2008)
KontaktDB (Sqlite und PyQt4)
-
- User
- Beiträge: 33
- Registriert: Mittwoch 15. August 2007, 10:43
Zuletzt geändert von use_opensue am Mittwoch 26. März 2008, 18:55, insgesamt 7-mal geändert.
http://kontaktdb.berlios.de/
-
- User
- Beiträge: 33
- Registriert: Mittwoch 15. August 2007, 10:43
Hallo YOGi,
wie meinst du das?
Bisher sind die Labels und LineEdits zeilenweise per
QHBoxLayout verknüpft. Und ein QVBoxLayout fasst die einzelnen Zeilen
zusammen.
Mfg
wie meinst du das?
Bisher sind die Labels und LineEdits zeilenweise per
QHBoxLayout verknüpft. Und ein QVBoxLayout fasst die einzelnen Zeilen
zusammen.
Mfg
-
- User
- Beiträge: 33
- Registriert: Mittwoch 15. August 2007, 10:43
Mir ist gerade aufgefallen, dass es ein Problem gibt, wenn der erste Eintrag in die Datenbank eingefügt wird -> das GUI friert ein.
Workaround: einfach das Programm neu starten.
Ich muss gestehen, dass ich nie mit einer leeren Datenbank getestet habe.
Für einen Fix habe ich erst am Freitag nachmittag zeit.
MfG
Workaround: einfach das Programm neu starten.
Ich muss gestehen, dass ich nie mit einer leeren Datenbank getestet habe.
Für einen Fix habe ich erst am Freitag nachmittag zeit.
MfG
Oha, viel Quelltext.
Möchte mich an Y0Gi anschliessen, dass man etwas am Layout ändern sollte. Das ist zu starr. Die grösse sollte sich dem Inhalt anpassen. Bei mir sind zum Beispiel nicht alle Texte in Buttons lesbar:
Wenn ich eine Adresse eingebe und speichern will bekomme ich folgende Ausnahme und eine GUI in der alles "ausgegraut" ist:
Ich würde mal sagen dass Programm funktioniert nicht, wenn die Datenbank noch leer ist, weil dann in `Fenster.set_up()` nichts in `aktueller_zaehler` geschrieben wird.
In der `main()`-Funktion verwendest Du zweimal den Namen `self`, den es dort gar nicht gibt.
Mit dem Sternchenimport von `PyQt4.QtGui` werden über 300 Namen in den Namensraum des Moduls geholt, von denen nur ein Bruchteil verwendet wird.
Wenn ein Quelltextabschnitt schon mit dem Kommentar "globale Variablen" eingeleitet wird… Und dann gibt's auch zwei davon. Eine `Tupel_Liste` wo mir weder aus dem Namen noch aus dem Kommentar klar ist, wozu die gut ist. Und ein `aktueller_zaehler`, eine Liste, die im Laufe des Programms immer nur ein Element enthält, ein hässlicher Workaround um das sowieso schon hässliche ``global`` zu umgehen.
Es gibt schon seit einiger Zeit keinen "richtigen" Unterschied zwischen `int` und `long` mehr. Man braucht bei Konstanten kein ``L`` mehr anhängen. Und warum Du die `id` aus der Datenbank immer zweimal durch das Programm führst verstehe ich auch nicht. Das ganze in Tupeln zu speichern macht den Quelltext nicht unbedingt einfach zu lesen. Das führt zu undurchsichtiger Indexerei wie man in der Ausnahme oben sehen kann.
Bei ``for``-Schleifen über ganze Zahlen tatsächlich immer eine *Liste mit den Zahlen* hinzuschreiben ist, äh, naja Anfänger machen das, bevor sie das Tutorial durchgelesen haben, oder mal irgendwelchen anderen Python-Quelltext mit Schleifen über ganze Zahlen. Es gibt `xrange()`.
In `aktualisiere_lcdNum()` wird von der Länge der `Tupel_Liste` eins abgezogen. Ist da irgendein "Phantom"-Eintrag drin? Das sollte man kommentieren.
`setze_LEs_enabled()`, `get_LEs_text()`, `set_LEs_text()`, `DS_aenderungen_speichern()` könnte man jeweils eleganter mit einer Schleife schreiben. Die Liste der Namen der Felder sollte ein Klassenattribut sein, von dem man sich dann mit `len()` die "magische" Zahl 17 für die Schleifen holen kann, die jetzt über die Listen [1,2,...,16] laufen.
`vorheriger_DS()` und `naechster_DS()` ist nahezu Kopien voneinander, die sollte man zu einer Methode zusammen fassen, oder zumindest die gemeinsamen Teile in eine eigene Methode auslagern.
Die beiden ``del``-Anweisungen am Ende der `main()` sind überflüssig.
Möchte mich an Y0Gi anschliessen, dass man etwas am Layout ändern sollte. Das ist zu starr. Die grösse sollte sich dem Inhalt anpassen. Bei mir sind zum Beispiel nicht alle Texte in Buttons lesbar:
Wenn ich eine Adresse eingebe und speichern will bekomme ich folgende Ausnahme und eine GUI in der alles "ausgegraut" ist:
Code: Alles auswählen
Traceback (most recent call last):
File "Kontaktdatenbank.py", line 293, in DS_aenderungen_speichern
query_str.append(str(Tupel_Liste[aktueller_zaehler[0]][1][0]))
IndexError: list index out of range
In der `main()`-Funktion verwendest Du zweimal den Namen `self`, den es dort gar nicht gibt.
Mit dem Sternchenimport von `PyQt4.QtGui` werden über 300 Namen in den Namensraum des Moduls geholt, von denen nur ein Bruchteil verwendet wird.
Wenn ein Quelltextabschnitt schon mit dem Kommentar "globale Variablen" eingeleitet wird… Und dann gibt's auch zwei davon. Eine `Tupel_Liste` wo mir weder aus dem Namen noch aus dem Kommentar klar ist, wozu die gut ist. Und ein `aktueller_zaehler`, eine Liste, die im Laufe des Programms immer nur ein Element enthält, ein hässlicher Workaround um das sowieso schon hässliche ``global`` zu umgehen.
Es gibt schon seit einiger Zeit keinen "richtigen" Unterschied zwischen `int` und `long` mehr. Man braucht bei Konstanten kein ``L`` mehr anhängen. Und warum Du die `id` aus der Datenbank immer zweimal durch das Programm führst verstehe ich auch nicht. Das ganze in Tupeln zu speichern macht den Quelltext nicht unbedingt einfach zu lesen. Das führt zu undurchsichtiger Indexerei wie man in der Ausnahme oben sehen kann.
Bei ``for``-Schleifen über ganze Zahlen tatsächlich immer eine *Liste mit den Zahlen* hinzuschreiben ist, äh, naja Anfänger machen das, bevor sie das Tutorial durchgelesen haben, oder mal irgendwelchen anderen Python-Quelltext mit Schleifen über ganze Zahlen. Es gibt `xrange()`.
In `aktualisiere_lcdNum()` wird von der Länge der `Tupel_Liste` eins abgezogen. Ist da irgendein "Phantom"-Eintrag drin? Das sollte man kommentieren.
`setze_LEs_enabled()`, `get_LEs_text()`, `set_LEs_text()`, `DS_aenderungen_speichern()` könnte man jeweils eleganter mit einer Schleife schreiben. Die Liste der Namen der Felder sollte ein Klassenattribut sein, von dem man sich dann mit `len()` die "magische" Zahl 17 für die Schleifen holen kann, die jetzt über die Listen [1,2,...,16] laufen.
`vorheriger_DS()` und `naechster_DS()` ist nahezu Kopien voneinander, die sollte man zu einer Methode zusammen fassen, oder zumindest die gemeinsamen Teile in eine eigene Methode auslagern.
Die beiden ``del``-Anweisungen am Ende der `main()` sind überflüssig.
Hi!
Vorschlag, nach dem ich den Screenshot gesehen habe:
Auf der linken Seite könntest du ein QListWidget anbringen, das dir alle Datensätze anzeigt. Selektierte Datensätze könntest du dann exportieren oder löschen, ganz nach Benutzerwunsch. Lediglich zum Eintragen oder Modifizieren bräuchtest du dann den Dialog.
GnuShi
Vorschlag, nach dem ich den Screenshot gesehen habe:
Auf der linken Seite könntest du ein QListWidget anbringen, das dir alle Datensätze anzeigt. Selektierte Datensätze könntest du dann exportieren oder löschen, ganz nach Benutzerwunsch. Lediglich zum Eintragen oder Modifizieren bräuchtest du dann den Dialog.
GnuShi
-
- User
- Beiträge: 33
- Registriert: Mittwoch 15. August 2007, 10:43
Hey,
vielen Dank für die Kommentare!
Über QListWidget habe ich schon nachgedacht doch zum Einstieg habe ichs
erstmal gelassen.
An sich ist das aber eine sinnvolle Änderung, die ab sofort auf der Todo Liste
steht.
Beim Layout habe ich zwar Spacer eingefügt, doch Größenänderungen
verpuffen irgendwie im Nichts, dazu muss ich sicher noch ein bischen in der
Doku lesen.
In der GUI sind immer nur die sinnigen Buttons aktiv, das führt mit einer leeren
Datenbank zum "einfrieren", da die Programmausführung abbricht.
Eine Lösung habe ich schon im Kopf, die wird dann am Freitag umgesetzt.
Die globalen Variablen sind böse, und benötigt werden sie eigentlich auch
nicht, das wollte ich mit der nächsten Version beheben.
Warum gibt es zwischen int und long keinen Unterschied mehr?
xrange() kannte ich bis dato nicht.
In "aktualisiere_lcdNum()" wird die Länge von "Tupel_Liste" um eins verringert,
da die Lcds bei Null beginnen.
`setze_LEs_enabled()`, `get_LEs_text()`, `set_LEs_text()`, `DS_aenderungen_speichern()` mit einer Schleife, daran hatte ich gar nicht gedacht, gefallen haben sie mir, so wie sie sind nicht.
Die Vereinheitlichung von `vorheriger_DS()` und `naechster_DS()` war
ebenfalls für die nächste Version geplant.
Zu den "del" Anweisungen kann ich jetzt aus dem Stehgreif nichts sagen, dazu
am Freitag mehr.
Nochmal Vielen Dank, hoffentlich schaffe ich es am Freitag eine bereinigte
Version zu veröffentlichen
Bis Freitag
use_opensu(s)e
vielen Dank für die Kommentare!
Über QListWidget habe ich schon nachgedacht doch zum Einstieg habe ichs
erstmal gelassen.
An sich ist das aber eine sinnvolle Änderung, die ab sofort auf der Todo Liste
steht.
Beim Layout habe ich zwar Spacer eingefügt, doch Größenänderungen
verpuffen irgendwie im Nichts, dazu muss ich sicher noch ein bischen in der
Doku lesen.
In der GUI sind immer nur die sinnigen Buttons aktiv, das führt mit einer leeren
Datenbank zum "einfrieren", da die Programmausführung abbricht.
Eine Lösung habe ich schon im Kopf, die wird dann am Freitag umgesetzt.
Die globalen Variablen sind böse, und benötigt werden sie eigentlich auch
nicht, das wollte ich mit der nächsten Version beheben.
Warum gibt es zwischen int und long keinen Unterschied mehr?
xrange() kannte ich bis dato nicht.
In "aktualisiere_lcdNum()" wird die Länge von "Tupel_Liste" um eins verringert,
da die Lcds bei Null beginnen.
`setze_LEs_enabled()`, `get_LEs_text()`, `set_LEs_text()`, `DS_aenderungen_speichern()` mit einer Schleife, daran hatte ich gar nicht gedacht, gefallen haben sie mir, so wie sie sind nicht.
Die Vereinheitlichung von `vorheriger_DS()` und `naechster_DS()` war
ebenfalls für die nächste Version geplant.
Zu den "del" Anweisungen kann ich jetzt aus dem Stehgreif nichts sagen, dazu
am Freitag mehr.
Nochmal Vielen Dank, hoffentlich schaffe ich es am Freitag eine bereinigte
Version zu veröffentlichen
Bis Freitag
use_opensu(s)e
`int`\s werden automatisch zu `long`\s wenn das Ergebniss nicht mehr in ein `int` passt. Begründung ist IIRC dass die Unterscheidung zu viel von der Hardware durchblicken lässt und eine zu willkürliche Einschränkung für eine Hochsprache ist.
Bei den LCD-Zahlen hätte ich eher erwartet, dass dort bei Datensatz x von y bei y die Anzahl der Datensätze steht. Also eher x um eins nach oben korrigiert werden sollte als umgekehrt. Keine Ahnung warum ich als Programmierer da einen Start bei 1 erwartet hätte.
Bei den LCD-Zahlen hätte ich eher erwartet, dass dort bei Datensatz x von y bei y die Anzahl der Datensätze steht. Also eher x um eins nach oben korrigiert werden sollte als umgekehrt. Keine Ahnung warum ich als Programmierer da einen Start bei 1 erwartet hätte.
Hier mal grob angedeutet, was ich mit "zweispaltig" meine:
http://img518.imageshack.us/my.php?image=guizu8.jpg
Das Ganze natürlich noch weiter umgesetzt, idealerweise alles auf selber Höhe (in der Breite).
Für Screenshots von Widget-GUI-Anwendungen empfiehlt sich übrigens PNG wegen der verlustfreien Komprimierung deutlich mehr als JPEG.
http://img518.imageshack.us/my.php?image=guizu8.jpg
Das Ganze natürlich noch weiter umgesetzt, idealerweise alles auf selber Höhe (in der Breite).
Für Screenshots von Widget-GUI-Anwendungen empfiehlt sich übrigens PNG wegen der verlustfreien Komprimierung deutlich mehr als JPEG.
-
- User
- Beiträge: 33
- Registriert: Mittwoch 15. August 2007, 10:43
So, eine Version 1.0.0.2 ist online.
Die behebt aber nur den Fehler, mit einer leeren Datenbank, mehr habe ich
gestern Abend nicht geschafft.
Evtl. gibts heute im laufe des Tages Version 1.0.0.3...
@BlackJack: int wird automatisch zu lang, sehr schön, wieder etwas das nicht
vom Eigentlichen ablenkt.
@DarXun: ist behoben.
@Y0Gi: Ahh, jetzt ist mir klar, was du meinst. JPEG VS PNG, macht für mich
keinen Unterschied, ab jetzt dann PNGs.
Verdammt, mir ist gerade wieder etwas ungeschicktes aufgefallen, wird in 1.0.0.3
angepasst(eine überflüssige MessageBox).
Mfg use_opensu(s)e
Die behebt aber nur den Fehler, mit einer leeren Datenbank, mehr habe ich
gestern Abend nicht geschafft.
Evtl. gibts heute im laufe des Tages Version 1.0.0.3...
@BlackJack: int wird automatisch zu lang, sehr schön, wieder etwas das nicht
vom Eigentlichen ablenkt.
@DarXun: ist behoben.
@Y0Gi: Ahh, jetzt ist mir klar, was du meinst. JPEG VS PNG, macht für mich
keinen Unterschied, ab jetzt dann PNGs.
Verdammt, mir ist gerade wieder etwas ungeschicktes aufgefallen, wird in 1.0.0.3
angepasst(eine überflüssige MessageBox).
Mfg use_opensu(s)e
Der Unterschied ist, dass JPEG die Screenshots besonders auf einfarbigen Flächen "dreckig macht". Wenn du deinen Screenshot mal vergrößerst, sollte dir das sofort auffallen.
Bei PNG hingegen werden solche Flächen sauber belassen, Kanten bleiben scharf und es besteht zusätzlich die Möglichkeit, die Anzahl der Farben zu reduzieren, was oft viel Platz spart (inbesondere wenn keine Farbverläufe in der Titelleiste sind oder ähnlicher Firlefanz).
Bei PNG hingegen werden solche Flächen sauber belassen, Kanten bleiben scharf und es besteht zusätzlich die Möglichkeit, die Anzahl der Farben zu reduzieren, was oft viel Platz spart (inbesondere wenn keine Farbverläufe in der Titelleiste sind oder ähnlicher Firlefanz).
Zuletzt geändert von Y0Gi am Samstag 15. März 2008, 13:00, insgesamt 1-mal geändert.
-
- User
- Beiträge: 33
- Registriert: Mittwoch 15. August 2007, 10:43
Mit nur einem Tag Verspätung( fast so gut wie die Bahn )
ist Version 1.0.0.3 verfügbar.
Hier nochmal die Url: http://kontaktdb.berlios.de/index.de.html
Änderungen:
- GUI vereinheitlicht
- xrange() wird genutzt
- Sternchenimport von PyQt4 entfernt
- gleicher Kode von "vorheriger_DS()" und "naechster_DS()" in "anderer_DS" ausgelagert
- int / long angepasst
- globale Variablen entfernt
In Version 1.0.0.4 will ich die Methoden `setze_LEs_enabled()`, `get_LEs_text()`,
`set_LEs_text()`, `DS_aenderungen_speichern()` nach den Anmerkungen von
BlackJack umgestalten, sowie die Anwendung für Internationalisierung fit machen.
Nebenbei verschwinden dann auch Texte wie "ae" und co.
In Version 1.0.1.z will ich eine Suchfunktion haben, und in Version 1.1.y.z soll
die GUI ein QListWidget sein...
Soweit so gut, Kommentare sind nach wie vor gern gesehen
use_opensu(s)e
ist Version 1.0.0.3 verfügbar.
Hier nochmal die Url: http://kontaktdb.berlios.de/index.de.html
Änderungen:
- GUI vereinheitlicht
- xrange() wird genutzt
- Sternchenimport von PyQt4 entfernt
- gleicher Kode von "vorheriger_DS()" und "naechster_DS()" in "anderer_DS" ausgelagert
- int / long angepasst
- globale Variablen entfernt
In Version 1.0.0.4 will ich die Methoden `setze_LEs_enabled()`, `get_LEs_text()`,
`set_LEs_text()`, `DS_aenderungen_speichern()` nach den Anmerkungen von
BlackJack umgestalten, sowie die Anwendung für Internationalisierung fit machen.
Nebenbei verschwinden dann auch Texte wie "ae" und co.
In Version 1.0.1.z will ich eine Suchfunktion haben, und in Version 1.1.y.z soll
die GUI ein QListWidget sein...
Soweit so gut, Kommentare sind nach wie vor gern gesehen
use_opensu(s)e
-
- User
- Beiträge: 33
- Registriert: Mittwoch 15. August 2007, 10:43
Hey,
ich suche Übersetzer für die KontaktDB.
Das ganze geht ganz einfach mit dem Qt Linguist.
Wenn jemand Interesse hat, einfach melden.
Version 1.0.0.4 ist bis auf zwei schönheitsfehler fertig.
ich suche Übersetzer für die KontaktDB.
Das ganze geht ganz einfach mit dem Qt Linguist.
Wenn jemand Interesse hat, einfach melden.
Version 1.0.0.4 ist bis auf zwei schönheitsfehler fertig.
http://kontaktdb.berlios.de/
-
- User
- Beiträge: 33
- Registriert: Mittwoch 15. August 2007, 10:43
So Version 1.0.0.4 ist veröffentlicht.
Ich freue mich auf Kritik und Übersetzer
Ich freue mich auf Kritik und Übersetzer
http://kontaktdb.berlios.de/
-
- User
- Beiträge: 33
- Registriert: Mittwoch 15. August 2007, 10:43
So Version 1.0.0.5 ist ab sofort verfügbar!
Es gibt eine Suchfunktion, eine verbesserte Oberfläche, sowie diverse
Übersetzungen. Auch sollte KontaktDB jetzt PEP08 konform sein.
KontaktDB ist aktuell in folgenden Sprachen verfügbar:
Englisch
Deutsch
Französisch*
Spanisch*
Italienisch*
Portugiesisch*
Die mit dem * gekennzeichneten Übersetzungen sind automatisiert
entstanden, und können deshalb fehler enthalten.
Ich suche nach wie vor noch Übersetzer / Mitstreiter.
Wer Fragen oder Anmerkungen hat, einfach hier stellen oder per Email
an mich (q000te AT users.berlios.de).
Mfg
use_opensu(s)e
Es gibt eine Suchfunktion, eine verbesserte Oberfläche, sowie diverse
Übersetzungen. Auch sollte KontaktDB jetzt PEP08 konform sein.
KontaktDB ist aktuell in folgenden Sprachen verfügbar:
Englisch
Deutsch
Französisch*
Spanisch*
Italienisch*
Portugiesisch*
Die mit dem * gekennzeichneten Übersetzungen sind automatisiert
entstanden, und können deshalb fehler enthalten.
Ich suche nach wie vor noch Übersetzer / Mitstreiter.
Wer Fragen oder Anmerkungen hat, einfach hier stellen oder per Email
an mich (q000te AT users.berlios.de).
Mfg
use_opensu(s)e
http://kontaktdb.berlios.de/
-
- User
- Beiträge: 33
- Registriert: Mittwoch 15. August 2007, 10:43
Hier mal eine Vorschau auf die nächste Evolutionsstufe:
Was haltet ihr davon?
Was haltet ihr davon?
http://kontaktdb.berlios.de/
-
- User
- Beiträge: 33
- Registriert: Mittwoch 15. August 2007, 10:43
Ab jetzt ist KontaktDB Version 1.0.0.6a verfügbar!
Version 1.0.0.6 habe ich nicht veröffentlicht(bug).
1.0.0.6a bringt ein Zusatzfenster, welches die Datensätze in einer Liste darstellt,
dies vereinfacht die Handhabung von vielen Datensätzen enorm.
Die Internetseite habe ich auch erneuert.
Ebenso gibt es einige Installer.
Rückmeldungen entweder hier im Forum, oder an q000te AT users.berlios.de
Hier ein Screenshot:
mfg use_opensu(s)e
Version 1.0.0.6 habe ich nicht veröffentlicht(bug).
1.0.0.6a bringt ein Zusatzfenster, welches die Datensätze in einer Liste darstellt,
dies vereinfacht die Handhabung von vielen Datensätzen enorm.
Die Internetseite habe ich auch erneuert.
Ebenso gibt es einige Installer.
Rückmeldungen entweder hier im Forum, oder an q000te AT users.berlios.de
Hier ein Screenshot:
mfg use_opensu(s)e
http://kontaktdb.berlios.de/