"Basistemplate" für PyQt Projekte

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Hi,
ich überlege mir gerade ob ich eine Art allgemeines Grundprogramm für PyQt Programme erstellen kann.

Im Prinzip ist die Grundstruktur bei vielen Programmen ähnlich. Hauptfenster, Menu, Toolbar, Statusbar, evt DockWidgets. Alles was man in praktisch jeder Applikation findet, inkl Ressourcen und Translation, würde ich gerne mal in ein Paket packen das man nehmen und erweitern kann.

Da ich noch nicht so fit in Python und Qt bin würde ich mich über Tips und Hilfen freuen. Wenn das einigermaßen fertig ist würde ich das auch gern in's Wiki packen wenn es irgendwo hin passt. Dann haben alle was davon

Was haltet Ihr von der Idee?
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Mhm, hat niemand Vorschläge wie man das angehen könnte? Wie sollte zb sinnvollerweise die Verzeichnisstruktur aussehen? Wie könnte man die Module aufteilen? Bzw wie macht man das "the pythonic way"?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also du könntest mal gucken, wie das Templating im Qt-Designer funzt! Da kann man ja custom-Widgets hinterlegen, die man dann einfach im Editor nutzen kann. Ich denke das wäre der beste Weg.

Alternativ erstellst Du Dir ein Main-Widget im Designer, erweiterst das dann sukkessive um die Features, die du haben möchtest und speicherst das dann so weg, dass du es fortan nutzen kannst.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Mhm, mit dem Designer möchte ich das ehrlich gesagt gar nicht machen. Zumindest das MainWidget, die Menus und Toolbars nicht. Das geht denke ich direkt im Code genauso einfach.

Das einzige was ich mit dem Designer machen würde sind die Dialoge, aber die sollen da noch gar nicht dazu weil die abhängig von der Applikation sind.

Und mit "Template" meine ich in erster Linie ein komplett lauffähiges Basisprogramm das man starten kann, ein MainWidget, ein Menu mit 2-3 Einträgen (File/Exit und Help/About zb) und eine Toolbar mit einem Exit Button erzeugt. Außerdem ein Verzeichnis für die Ressourcen und alles so vorbereitet das man die Ressourcen ergänzen kann. Und das gleiche auch für die Sprachen.

Alles soll halt möglichst generisch für eine Applikation mit Hauptfenster usw sein das man das einfach nehmen und erweitern kann.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

burli hat geschrieben:Mhm, mit dem Designer möchte ich das ehrlich gesagt gar nicht machen. Zumindest das MainWidget, die Menus und Toolbars nicht. Das geht denke ich direkt im Code genauso einfach.
Wieso? Das ist doch der beste Weg, da es absolut unabhängig von der Sprache ist _und_ auch von der API!

Hast Du Dir den Designer mal angeguckt?

GUIs per Hand basteln ist imho das ätzenste was es gibt. Schau Dir doch mal den Code an, den pyuic generiert. Ich finde den nicht besonders furchtbar. Also galub ich nicht wirklich, dass man es von Hand unbedingt schöner hinbekommen kann.

Naja, mußt Du wissen - aber so ist das Sharing mit anderen Usern auch leichter - denn viele arbeiten mit dem Designer ;-)
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Ich kenn den Designer und die von pyuic4 produzierten Files durchaus. Der Designer hat Vor- und Nachteile. Man kann mit dem Designer zb mal schnell ein Hauptmenu zusammentippen oder Dialoge erstellen.

Toolbars oder die Statuszeile finde ich von Hand gecodet einfacher, aber das ist wohl individuell unterschiedlich wie so vieles.

Man kann zb darüber streiten ob man die Funktion retranslateUi, die von pyuic4 erzeugt wird, gut findet oder nicht. Ich persönlich fände es schöner wenn die Translation direkt beim Widget wäre, aber vielleicht gibt es einen Grund warum es so gemacht wurde.
lunar

burli hat geschrieben:Toolbars oder die Statuszeile finde ich von Hand gecodet einfacher, aber das ist wohl individuell unterschiedlich wie so vieles.
Hast du eine Maus mit Bleigewichten drin, oder warum findest du Drag n' Drop so schwer? Mal abgesehen davon, dass der Designer dir das manuelle Laden der Resourcen komplett abnimmt.

Offenbar ist das händische Coden einer GUI doch nicht so der Hit, warum sonst würdest du nach einem Anwendungstemplate fragen ;)

Lerne den Designer und den Linguist zu nutzen, dann ist die Erstellung der Oberfläche samt Einbindung der Resourcen und der Message-Dateien einfach. Was bleibt, ist das Programmieren der Logik, was dir aber niemand abnehmen kann.
Man kann zb darüber streiten ob man die Funktion retranslateUi, die von pyuic4 erzeugt wird, gut findet oder nicht.
Nein, kann man nicht. Sie ist einfach gut.
Ich persönlich fände es schöner wenn die Translation direkt beim Widget wäre, aber vielleicht gibt es einen Grund warum es so gemacht wurde.
Wie hast du dir das vorgestellt? Soll das Widget bei der Zuweisen von Text mittels setText automagisch den aktuellen QTranslator bemühen? Wenn ja, wie soll das Widget dann jene Fälle identifizieren, in denen Text gar nicht
übersetzt werden kann oder soll?

Außerdem wird eine GUI in den meisten Fällen in der immer gleichen Sprache angezeigt. Welchen Sinn hat es also, die Übersetzung jedes Mal neu auszulesen? Das wäre nur Code, der nicht den geringsten Vorteil bietet.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

lunar hat geschrieben:Offenbar ist das händische Coden einer GUI doch nicht so der Hit, warum sonst würdest du nach einem Anwendungstemplate fragen ;)
Das hast du missverstanden, ich will das ja grad selber coden
lunar hat geschrieben: Lerne den Designer und den Linguist zu nutzen, dann ist die Erstellung der Oberfläche samt Einbindung der Resourcen und der Message-Dateien einfach. Was bleibt, ist das Programmieren der Logik, was dir aber niemand abnehmen kann.
Ich schaue mir den Designer noch in ruhe an.
lunar hat geschrieben:
Man kann zb darüber streiten ob man die Funktion retranslateUi, die von pyuic4 erzeugt wird, gut findet oder nicht.
Nein, kann man nicht. Sie ist einfach gut.
Warum? Begründung?

Ich will ja lernen, aber da müsste ich halt schon ein bissel mehr erfahren.

Mein Anliegen ist es eigentlich, eine Basis zu erstellen die für die meisten PyQt Applikationen eh gleich ist und die man einfach nehmen und erweitern kann. Ich will das schon selber machen, aber ein paar Ratschläge und Tipps wären nicht schlecht
BlackJack

IMHO sollte so eine Vorlage aus der Praxis erwachsen. Also nicht als eigenständiges Projekt von Null, sondern als Essenz aus mehreren realen Projekten.

Also einfach mal drauf achten, was man bei einem neuen Projekt von einem alten per Kopieren und Einfügen übernimmt, um sich Tipparbeit zu sparen, und was von der Struktur her gleich ist und heraus gezogen werden kann.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

BlackJack hat geschrieben:IMHO sollte so eine Vorlage aus der Praxis erwachsen. Also nicht als eigenständiges Projekt von Null, sondern als Essenz aus mehreren realen Projekten.
Mag sein, ich werde es aber trotzdem mal versuchen
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wieso eigentlich fragst Du dann hier :-D

Mal Spaß bei Seite - hast Du mit PyQt schon viel gemacht? Wenn nein, halte ich dieses Unterfangen auch für recht sinnfrei, weil Du dann ja gar nicht abschätzen kannst, was sinnvoll ist und was nicht!
lunar

burli hat geschrieben:
lunar hat geschrieben:Offenbar ist das händische Coden einer GUI doch nicht so der Hit, warum sonst würdest du nach einem Anwendungstemplate fragen ;)
Das hast du missverstanden, ich will das ja grad selber coden
Du hast mich missverstanden, ich versuche nämlich gerade, dir zu erklären, dass die Idee, Anwendungsvorlagen von vorneherein zu erstellen, unsinnig ist. Die Programmierung von Boilerplate-Code zur Erzeugung von GUIs nimmt dir der Designer ab, und ob du eigene Widgets später häufiger brauchst, kann dir nur die Erfahrung sagen.
lunar hat geschrieben:
Man kann zb darüber streiten ob man die Funktion retranslateUi, die von pyuic4 erzeugt wird, gut findet oder nicht.
Nein, kann man nicht. Sie ist einfach gut.
Warum? Begründung?
Sie ist der richtige Kompromiss zwischen Kontrolle und Automatismus. Deine Idee, Übersetzungen automagisch im Widget selbst zu laden, nimmt dem Programmierer die Kontrolle über die Übersetzung, was die Behandlung von Sonderfällen erschwert. Eine solche Methode ermöglicht dagegen, die Übersetzung zu kontrollieren, und ermöglicht trotzdem Goodies wie das Umschalten der Sprache "on the fly".
Ich will das schon selber machen, aber ein paar Ratschläge und Tipps wären nicht schlecht
Vergiss die Idee, und lerne stattdessen die Qt-Tools richtig zu nutzen, und lagere Code erst dann aus, wenn du ihn tatsächlich in mehreren Anwendungen benötigst. Ansonsten läuft nur Gefahr, Over-Engineering zu betreiben, und Code zu schreiben, denn du später nie brauchst.
Antworten