Vorgehensweise für modulare GUI Programmierung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

Sonntag 19. Oktober 2008, 11:18

Hi, ich hätte eine generelle Frage zur Vorgehensweise bei der Programmierung von GUIs. Es geht zwar im speziellen um PyQt, sollte aber bei allen anderen Toolkits genauso gelten, deshalb hab ich es in Allgemeine Fragen gepostet.

Generell geht es darum wie man eine komplexere GUI in mehrere Dateien aufsplittet. Ein Beispiel: Ein Editor für unterschiedliche Arten von Daten. Der Editor hat als Zentrales Widget Tabs für die offenen Daten.

Wie kann ich jetzt für jeden Datentyp einen eigenen Editor schreiben, diesen in eine eigene Datei legen und anschließend beim Erstellen einer neuen Datei den entsprechenden Editor als neuen Tab einfügen? Dazu kommt noch das die Editoren eine Möglichkeit haben sollen eigene Toolbars, Menus oder Dock Widgets hinzuzufügen

Oder allgemeiner ausgedrückt: ich möchte im Hauptframe die Container verwalten, den Inhalt der Container aber in eigenen Dateien schreiben. Gleichzeitig sollen die Container Daten zum Hauptframe hinzufügen können. Wie geht man da vor?
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Sonntag 19. Oktober 2008, 11:31

wie wäre es mit einer datei datentypen mit mehrewren classen die dann die objekte bekommen.
somit wird nur eine datei importiert
BlackJack

Sonntag 19. Oktober 2008, 11:38

@sea-live: burli möchte ja gerade *nicht* alles in einer Datei haben.

@burli: Editoren in eigene Module stecken und dann entweder beim einzelnen Editor Methoden zur Verfügung stellen, von denen die Haupt-GUI abfragen kann, was sie in die Menüs und Toolbars noch so hinzufügen soll, oder der `__init__()` der Editoren eine Referenz auf die Haupt-GUI mit geben, damit der einzelne Editor selber auf die Menüs usw. Zugriff bekommt.
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

Montag 20. Oktober 2008, 10:02

@sea-live: eben, ich möchte es vermeiden eine Datei unnötig aufzublasen. Es reicht schon wenn die Klasse des Formular in einer Datei steht.

@BlackJack: die zweite Variante dürfte die bessere sein. Ich hab auch schon überlegt GUI und Logik zu trennen. Müsste mir vielleicht mal MVC anschauen. Aber ich glaub das ist sekundär
Benutzeravatar
snafu
User
Beiträge: 5536
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Montag 20. Oktober 2008, 14:08

burli hat geschrieben:Ich hab auch schon überlegt GUI und Logik zu trennen.
Ich glaube, das sollte man sich nicht nur überlegen, sondern es ist sehr zu empfehlen. Gerade wenn du die Oberfläche mit dem Qt Designer baust, wird ja ohnehin jedes Mal eine neue Datei geschrieben (bzw die alte überschrieben). Das heißt du müsstest in dem Fall erst das komplette Design schreiben und dann die Logik in die Datei einfügen (denn ansonsten würde sie ja überschrieben werden). Und das ist ja eigentlich etwas, das man gerade *nicht* möchte. Also geht man eher so vor (zumindest mache ich das so), dass der logische Teil den grafischen Teil später importiert und somit beide unabhängig voneinander sind.
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

Montag 20. Oktober 2008, 16:06

Ich überlege noch ob und wieviel ich mit dem Designer mache. Aber das ist schon richtig. Mit dem Designer ne GUI erzeugen und dann da drin editieren ist irgendwie sinnlos. Mal schauen wie ich das anstelle
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Montag 20. Oktober 2008, 16:17

Nicht nur das, auch Logik und GUI generell.
Pack die GUI in eine eigene Klasse oder gleich Datei - gerade wenn du den Designer benutzt. Das macht das Programm leichter wartbar, weil du nicht soviele Fallstricke damit aufbaust.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 20. Oktober 2008, 17:16

Übrigens würde ich ja raten, nicht den Designer den Code generieren lassen sondern die Dateien des Designers einzubinden, wie das eigentlich in jedem modernen Toolkit möglich ist (und sogar weniger modernen, wie das was Windows da bietet). Wie das bei Qt genau möglich ist, das schaut ihr in der Dokumentation nach oder in Lunars Programmen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

Montag 20. Oktober 2008, 17:30

Ist auch ne Möglichkeit. Sind nix anderes als XML Dateien oder sowas. Allerdings generiert die "Compilierung" auch gleich Code zb für die Übersetzung der Sprache.

Aber wie gesagt, ich halte den Designer nur bedingt für tauglich. Hauptsächlich für Dialoge oder einfache Frames ist der sinnvoll. Wenn es umfangreicher wird ist Coden von Hand glaub ich besser. Aber das muss ich mal austesten
Benutzeravatar
snafu
User
Beiträge: 5536
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Montag 20. Oktober 2008, 19:23

Wann ist ein Frame denn für dich ein "einfaches" Frame und ab wann könnte der Designer deiner Meinung nach überfordert sein? Ich habe große Schwierigkeiten, deine gerade gemachte Aussage nachzuvollziehen. Aber vielleicht gibt ja bestimmte Dinge, auf die man bei großen GUIs achten muss, von denen ich nichts weiß.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Montag 20. Oktober 2008, 21:36

Mit einem Designer kann man schon sehr viel machen. Viele Kritiker monieren, dass man bei extrem dynamischen GUIs eh vieles per Hand designen muss und man sich deswegen dann auch den Designer für das "bischen" drum herum sparen kann.

Ich sehe das anders. Das "bischen" drum herum ist oftmals das, was eine GUI strukturierter gestaltet und wofür es durchaus brauchbare Templates für einen Designer gibt (Stichwort Menüleiste usw). Desweiteren lassen sich auch die dynamischen Elemente früher oder später in atomare Bereiche untergliedern. Diese kann man ja auch per Designer erstellen und dann zur Laufzeit dynamisch in die restliche GUI einbauen. Auch hier kann man dann später alle Vorteile des Designers nutzen, ohne sich imho irgend welche Nachteile einzufangen.

Ich glaube viele dieser Vorurteile kommen aus der Java-Welt, in der es ja zum guten Ton von Designern gehört, direkt Code zu generieren und darin herumzupfuschen. Das hat mir bisher unter Java auch den "Spaß" an GUIs verdorben - sofern GUIs überhaupt Spaß machen :-D
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

Dienstag 21. Oktober 2008, 10:03

Naja, für den Hauptframe brauche ich ne Menuleiste, ne Toolbar und die Statuszeile. Die sind mehr oder weniger leer. Dafür brauche ich nicht unbedingt einen Designer.

Aber vielleicht wird es dann interessant wenn man eine mehrsprachige Anwendung programmiert, die Ressourcen nutzt usw.

Ich gebe zu das ich noch lange nicht alles weiß, speziell was der Designer alles kann und wie man damit umgeht. Vielleicht lerne ich die Vorteile ja noch kennen
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 21. Oktober 2008, 10:13

burli hat geschrieben:Naja, für den Hauptframe brauche ich ne Menuleiste, ne Toolbar und die Statuszeile. Die sind mehr oder weniger leer. Dafür brauche ich nicht unbedingt einen Designer.
Also wenn ich sehe, was mir der Designer da schon alles an Zeugs ausspuckt, nur um ein simples QtMainWindow auf den Schirm zu zaubern, möchte ich das nicht alles per Hand machen ;-) Vor allem weißt Du u.U. noch nicht einmal, was Du noch alles brauchst. Später willst Du evtl. Menüpunke hinzufügen usw und das geht dann per Editor imho schneller und bequemer.
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

Dienstag 21. Oktober 2008, 10:28

Hyperion hat geschrieben:Später willst Du evtl. Menüpunke hinzufügen usw und das geht dann per Editor imho schneller und bequemer.
Das ist das gleiche wie die Diskussion ob eine GUI oder eine Konsole schneller/besser ist. Jeder wie wer meint ;). Wenn man den Dreh erstmal raus hat ist es denke ich auch von Hand kein Problem schnell Änderungen vorzunehmen
Benutzeravatar
snafu
User
Beiträge: 5536
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dienstag 21. Oktober 2008, 10:42

burli hat geschrieben:Naja, für den Hauptframe brauche ich ne Menuleiste, ne Toolbar und die Statuszeile. Die sind mehr oder weniger leer. Dafür brauche ich nicht unbedingt einen Designer.
Aber gehört nicht genau das zu den "einfachen" Frames, von denen du vorher gesprochen hast und wo der Designer angeblich geeigneter wäre? Ich möchte dir den Designer sicher nicht aufzwingen, aber zumindest bei der Argumentation sollte man sich doch iim Klaren darüber sein, wofür man denn nun eigentlich plädieren will. ;)
Antworten