Forum: PC-Programmierung Modernes GUI-Framework für Linux


von Borislav B. (boris_b)


Lesenswert?

Hallo zusammen,
über kurz oder lange würde ich gerne auf Linux umsteigen. Da ich 
hobbymäßig viel Software entwickele wollte ich mich schon mal schlau 
machen, welche Möglichkeiten es da so gibt.

Insbesondere würden mich GUI-Frameworks interessieren, die eine strikte 
Trennung von GUI (z.B. XML) und Logik (Sourcecode) erlauben. Bei Android 
(ist ja ein Linux) wird dieses (IMHO sehr elegante) Schema ja schön 
umgesetzt. Und auch bei Windows ist es mittlerweile sehr verbreitet.

Bei Linux wird eigentlich immer nur auf Qt verwiesen, was aber meines 
Wissens nach nicht auf dieses Prinzip setzt. Zusätzlich ist es ja 
eigentlich nur mit C++ sinnvoll zu verwenden, und auf eine bestimmte 
Sprache möchte ich mich eigentlich nicht festlegen.

Was käme sonst noch in Frage? Gibt es vielleicht auch noch irgendwelche 
spannenden Neuentwicklungen von denen ich nichts weiß?

: Verschoben durch Moderator
von Olaf D. (Firma: O.D.I.S.) (dreyero)


Lesenswert?

Hallo,

bei Qt werden die UserInterfaces in sogenannten .ui Dateien beschrieben.
Das besteht aber gerade aus XML.
Der Code ist dann reines C++.

Aber wenn Du dich nicht auf die Verwendung einer Sprache festlegen 
willst,
dann musst Du .NET nehmen <Ironie>, dann fällts mit dem Umstieg auf 
Linux
auch leichter</Ironie>.

Gruß

Olaf

von Borislav B. (boris_b)


Lesenswert?

Olaf Dreyer schrieb:
> Aber wenn Du dich nicht auf die Verwendung einer Sprache festlegen
> willst,
> dann musst Du .NET nehmen

Es wird doch wohl ein Sprachunabhängiges GUI-Framework für Linux geben?
Bei Linux gibt es doch nichts, was es nicht gibt ;-)

von Dennis S. (eltio)


Lesenswert?

Soweit ich weiß gibt es doch für die großen Frameworks immer Bindigs für 
alle mnöglichen Sprachen, oder nicht? Also bei GTK+ bin ich mir sicher, 
aber ich glaube das erfüllt nicht deine Forderung nach der Trennung von 
Code und Design.

Gruß Dennis

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Boris B. schrieb:
> Es wird doch wohl ein Sprachunabhängiges GUI-Framework für Linux geben?

Was für Sprachen schweben dir denn vor?

Neben C++ kannst du Qt zumindest in irgendwelche Scriptsprachen
einbinden.

von Olaf D. (Firma: O.D.I.S.) (dreyero)


Lesenswert?

Jedes Framework ist sprachenabhängig. Außer .NET.
Aber bei Qt kannst Du native in C++ programmieren oder in
einer anderen Sprache in denen Qt-Bindings existieren.

Zitat:
Programming Language Support & Language Bindings

The Qt API is implemented in C++, and provides additional features for 
easier cross-platform development. QML – introduced with Qt Quick is a 
CSS and JavaScript-like declarative, language designed to describe the 
user interface of a program: both what it looks like, and how it 
behaves. Bindings to Qt exist for several other languages, including 
Ada, Pascal, Perl, PHP, Ruby, Python and Java™.

Gruß

Olaf

von Rolf Magnus (Gast)


Lesenswert?

Olaf Dreyer schrieb:
> bei Qt werden die UserInterfaces in sogenannten .ui Dateien beschrieben.
> Das besteht aber gerade aus XML.

Genau. Zur Erzeugung der Fenster gibt es dann einen ensprechenden 
GUI-Builder (Qt Designer), mit dem man diese .ui-Files erstellen kann. 
Genutzt werden können die wahlweise über einen Codegenerator (uic), der 
aus den .ui-Files C++-Code erzeugt, den man dann in sein Programm 
einbinden kann oder über den QtUiLoader, der .ui-Files auch dynamisch 
zur Laufzeit laden und entsprechende Fenster erzeugen kann.
Man hat aber immer noch auch die Möglichkeit, direkt "von Hand" im 
C++-Code alle GUI-Elemente zu nutzen. So kann man auch mal was machen, 
das diese dynamisch erzeugt abhängig von irgendwelchen eigelesenen Daten 
zum Beispiel.

Olaf Dreyer schrieb:
> Jedes Framework ist sprachenabhängig. Außer .NET.

So sprachunabhängig ist das auch nicht. Man kann es z.B. nicht mit C++ 
benutzen, sondern nur mit einer von Microsoft speziell für .NET 
modifizierten C++-ähnlichen Sprache.

von radiostar (Gast)


Lesenswert?

Frage: was ist denn da der Vorteil, wenn ich GUI und Logik trenne?

von Dennis S. (eltio)


Lesenswert?

radiostar schrieb:
> Frage: was ist denn da der Vorteil, wenn ich GUI und Logik trenne?

Mehr Flexibilität und Übersicht. Du kannst zum Beispiel fehlerhafte 
Algorithmen verbessern ohne, dass das komplette Programm (also auch die 
GUI) davon betroffen ist. Genauso kannst du die GUI anpassen ohne, dass 
sich die Logik ändert. Such mal nach Drei-Schichten-Architektur oder so!

Gruß Dennis

: Bearbeitet durch User
von Oliver (Gast)


Lesenswert?

Das wüsste ich auch gerne.

Die beiden sind doch immer verknüpft.
Ausserdem kenne ich keinen Anwendungsfall wo ich mit der gleichen GUI 
mal in C++ mal in zB. JAVA programmiertechnisch ran will.
Dann müsste ich ja das Programm 2 mal schreiben.

Plattformunabhänigkeit ist mir da immer viel wichtiger.

von Borislav B. (boris_b)


Lesenswert?

Oliver schrieb:
> Ausserdem kenne ich keinen Anwendungsfall wo ich mit der gleichen GUI
> mal in C++ mal in zB. JAVA programmiertechnisch ran will.

Wenn dann auch eher umgekehrt. Gleiche Business Logik, andere GUI.

von Rolf Magnus (Gast)


Lesenswert?

radiostar schrieb:
> Frage: was ist denn da der Vorteil, wenn ich GUI und Logik trenne?

Der gleiche, den man beim Modularisieren immer hat. Übersichtlicherer 
Code und mehr Flexibilität für spätere Änderungen.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Boris B. schrieb:
> Es wird doch wohl ein Sprachunabhängiges GUI-Framework für Linux geben?

Für jeden Toolkit gibt es erst einmal die Sprache des nativen API. Das
ist bspw. C für GTK+, C++ für Qt und Tcl für Tk.

Dann gibt es für die meisten Toolkits so genannte Language-Bindings,
über die der jeweilige Toolkit auch von anderen Sprachen aus benutzt
werden kann. Das sind im Wesentlichen Bibliotheken mit angepassten
Datentypen und Wrapper-Funktionen. Die gängigen Toolkits haben so
zwischen 10 und 30 solcher Bindings.

Olaf Dreyer schrieb:
> Jedes Framework ist sprachenabhängig. Außer .NET.

Die .NET GUI-Toolkits haben den Vorteil, dass man prinzipiell auch ohne
Wrapper-Funktionen und angepasste Datentypen auskommen kann, weil alle
.NET-Sprachen auf dem gleichen Daten- und Ausführungsmodell basieren.
Der Nachteil besteht darin, dass dieses Modell so stark einschränkend
ist, dass die meisten klassischen Sprachen nicht darauf implementiert
werden können. Somit können die .NET-GUI-Toolkits nicht von C, C++,
Java, Pascal usw. genutzt werden, sondern – wenn überhaupt – nur von
stark vom Original abweichenden Dialekten dieser Sprachen.

radiostar schrieb:
> Frage: was ist denn da der Vorteil, wenn ich GUI und Logik trenne?

Zum einen sollte jede Software in logische Blöcke mit möglichst
schlanken Schnittstellen zwischen diesen Blöcken strukturiert werden,
weil dies die Übersichtlichkeit, Wartbarkeit, Erweiterbarkeit und
Wiederverwendbarkeit fördert.

Zu anderen lässt sich bei sauberer Trennung des GUIs leicht eine
TUI-Version (TUI = textuelles User-Interface :)) von der Anwendung
erstellen, die dann auch in Skripten u.ä. benutzt werden kann.

Bei einigen Unix/Linux-Anwendungen geht diese Trennung sogar so weit,
dass die Anwendung und deren GUI zwei getrennte Programme sind, die nur
über Pipes oder TCP-Sockets miteinander kommunizieren.

Oliver schrieb:
> Die beiden sind doch immer verknüpft.

Dieser Eindruck entsteht dadurch, das Microsoft seinerzeit mit der
MFC-Bibliothek die Vermauschelung von Anwendung und GUI regelrecht
gefördert hat und auch bei den selber entwickelten Anwendungen mit
schlechtem Beispiel voranging. So haben es viele Anwendungsentwickler
für Windows einfach nie anders gelernt.

Die moderneren GUI-Toolkits (auch die von Microsoft) unterstützen die
Trennung von Anwendung und GUI meist recht gut. Trotzdem muss auch der
Entwickler seinen Teil dazu beitragen.

Wie stark die Trennung sinnvollerweise ist, hängt aber sehr stark vom
Anwendungstyp ab. So ist sie bspw. bei einem Zeichenprogramm, das zu 90%
aus GUI besteht, nicht nur schwer zu realisieren, sondern auch nicht
ganz so wichtig. Bei einem Schachprogramm hingegen ist die Trennung sehr
leicht und auch wichtig, da die Schachzüge evtl. nicht nur über das GUI,
sondern auch über ein externes Sensorbrett mit realen Figuren oder durch
ein anderes Schachprogramm über eine Socket-Schnittstelle eingegeben
werden sollen.

von Oliver (Gast)


Lesenswert?

Achso jetzt verstehe ich das.

Gleicher Code aber andere GUI.

Das können spezielle Schnittstellen sein oder auch nur eine Art SKIN 
Interpreter.
Aber auch hier hat man doch immer eine gewisse Abhängigkeit.
Der Schnittstellen Code der GUI wird immer zur GUI passen müssen.
Ein SKIN Interpreter erwartet immer gewisse Elemente. Weg lassen geht 
meistens, aber neue kennt doch dann niemand und wird damit auch nichts 
anfangen können.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.