Seite 1 von 1

[PyQt] Vokabeltrainer schreiben

Verfasst: Sonntag 7. Dezember 2008, 19:03
von vorlautboy
Servus leute,

ich versuche gerade mithilfe des gui-frameworks qt einen vokabeltrainer zu schreiben. ich habe jetzt folgende probleme:

(1) wenn man das programm startet soll zuerst eine eingabemaske für verschiedene optionen erscheinen (zb. lektion etc.), nachdem diese ausgefüllt und bestätigt wurde, soll das eigentliche programm im selben widget (QFrame) beginnen.
die eingabemaske für die optionen hat aber total andere widgets und ein anderes layout als das eigentliche programm; wie macht man jetzt den übergang von der eingabemaske zum eigentliche programm? gibt es in qt nicht etwas panel-ähnliches das man als parents für die widgets verwendet und nach der eingabe der optionen einfach ausblenden kann?

(2) die vokabeln stehen in einer .csv datei und werden innerhalb des programms in einer qsqldatabase verwaltet. wie kann man die datenbank am besten auf der festplatte sichern, damit die datenbank direkt geladen werden kann?

vielen dank für eure antworten schonmal im voraus! :)

Verfasst: Sonntag 7. Dezember 2008, 19:11
von derdon
Moin vorlautboy,

vielleicht hilft es dir weiter, wenn du dir den Quellcode von V-Trainr anguckst.

Re: [PyQt] Vokabeltrainer schreiben

Verfasst: Sonntag 7. Dezember 2008, 19:34
von lunar
vorlautboy hat geschrieben:(1) wenn man das programm startet soll zuerst eine eingabemaske für verschiedene optionen erscheinen (zb. lektion etc.), nachdem diese ausgefüllt und bestätigt wurde, soll das eigentliche programm im selben widget (QFrame) beginnen.
die eingabemaske für die optionen hat aber total andere widgets und ein anderes layout als das eigentliche programm; wie macht man jetzt den übergang von der eingabemaske zum eigentliche programm? gibt es in qt nicht etwas panel-ähnliches das man als parents für die widgets verwendet und nach der eingabe der optionen einfach ausblenden kann?
Dafür gibt es z.B. "QtGui.QStackedLayout". Allerdings ist das nicht unbedingt im Sinne der Usability, besser wäre imho die Anzeige eines Dialogs.
(2) die vokabeln stehen in einer .csv datei und werden innerhalb des programms in einer qsqldatabase verwaltet. wie kann man die datenbank am besten auf der festplatte sichern, damit die datenbank direkt geladen werden kann?
Der Sinn erschließt sich mir nicht? Willst du nun CSV-Dateien laden, oder eine echte SQL-Datenbank?

Re: [PyQt] Vokabeltrainer schreiben

Verfasst: Sonntag 7. Dezember 2008, 20:24
von vorlautboy
(2) die vokabeln stehen in einer .csv datei und werden innerhalb des programms in einer qsqldatabase verwaltet. wie kann man die datenbank am besten auf der festplatte sichern, damit die datenbank direkt geladen werden kann?
Der Sinn erschließt sich mir nicht? Willst du nun CSV-Dateien laden, oder eine echte SQL-Datenbank?
momentan ist die datenbank noch in der csv datei, beim nächsten mal laden soll sie aber als sql datenbank gespeichert und danach dauerhaft auch so geladen werden; ich kann nur keine funktion finden, die die datenbank so auf die platte schreibt, dass sie sich später auch wieder problemlos mit qtsql laden lässt.

Verfasst: Sonntag 7. Dezember 2008, 21:10
von lunar
http://doc.trolltech.com/4.4/qtsql.html <- Dafür gibt es das QtSql Modul

Verfasst: Sonntag 7. Dezember 2008, 21:16
von vorlautboy
lunar hat geschrieben:http://doc.trolltech.com/4.4/qtsql.html <- Dafür gibt es das QtSql Modul
ja aber welche methode wird zum schreiben auf die platte verwendet oder muss man das selbst machen?

Verfasst: Sonntag 7. Dezember 2008, 21:33
von lunar
Es ist nicht die Aufgabe des Programms, die Daten persistent zu speichern. Genau dafür ist die Datenbank ja da. Das DBMS garantiert, dass abgeschlossene Transaktionen persistent sind.

Wenn du – wie ich vermute – nur eine einzige Datei nutzen möchtest, dann kannst du als Datenbanktreiber SQLite nutzen. Dadurch wird eine einzige Datei gespeichert. Bei vollwertigen DBMS wie MySQL oder Postgre dagegen ist der Datenbankserver für die Speicherung zuständig.

Ich denke, du solltest dir erstmal Grundlagen über Datenbanken aneignen, da dir diese offenbar fehlen.

Falls du ein Beispiel benötigst: Aufbau der Datenbankverbindung und das dazugehörige Model.