• Café
  • Wie und womit GUI für Gtk3 oder Gtk4 programmieren?

Hallo Forum,
Eine Frage im Cafe-Bereich, weil das Thema nicht direkt mit ArchLinux zu tun hat.

Beruflich programmiere ich (leider nur nebenher) in Delphi; ein bisschen Python und anderes ist auch dabei (leider unter Windows - keine Diskussion: den Kampf führe ich nicht!). Delphi führe ich im Private mit Lazarus/FPC weiter. Vorteil: das erlaubt "Visual Programming" - sprich, ich erstelle die GUI meiner Programme und packe den Code drum rum. Das geht sehr gut und intuitiv.

Leider ist Lazarus aber auf Gtk2 stehen geblieben - moderneres wie Gtk3 oder gar Gtk4 fehlt (und scheint auf lange Sicht auch noch länger zu fehlen). Ich würde aber gerne auch eine modernere GUI bauen können (auch im Hinblick auf Wayland und eventuell Sway).

Da Lazarus bzw Free Pascal wohl nicht geht, bin ich auf der Suche nach was anderem - z.B. C (von früher mal) oder gerade modern: Rust. Irgendwie finde ich aber keine gute Möglichkeit, eine GUI zu bauen. Es gibt (für Rust wie auch für C oder Python) Anleitungen und HowTos, wie man ein GUI zusammen programmieren kann - im Code direkt! Das ist dröge - und für komplexere GUIs schlicht nicht praktikabel, denke ich.

Früher gab es mal Glade, mit dem sich GUI definieren ließen; es fiel eine .UI-Datei (in wesentlichen XML) raus, die in's Projekt geladen wurde. Glade scheint für Gtk3 oder 4 nicht zu tun (warum?), aber es scheint einen Nachfolger zu geben, habe ich heraus gefunden: Cambalache.

Der ArchLinux-relevante Teil: Cambalache gibt es im AUR:

╭─[photor@Picard:~]
╰─>$ pikaur -Ss cambalache
Suche... [###]
aur/cambalache 0.16.0-2 (10, 1.98)
    A new RAD tool for Gtk 4 and 3    
aur/cambalache-git 0.8.1.r204.g2f601c6-1 [veraltet: 2023/05/13] [installiert: 0.16.0.r11.g8081765-1] (4, 0.01)
    A new RAD tool for Gtk 4 and 3 with a clear MVC design and data model first    
    philosophy    
╭─[photor@Picard:~]
╰─>$ 

Installieren konnte ich nur die -git-Version, die aber veraltet ist (die neuere Version ließ sich nicht bauen - muss ich nochmal schauen). Mit der habe ich ein bisschen rum probiert; komplexere GUI sind wohl damit auch etwas schwieriger (verglichen mit Lazarus). Analog zu Glade, erzeugt Cambalache ein .ui-File, das dann wieder im Code herangezogen wird (Anleitung dazu im Prinzip zum Prinzip gefunden).

Soweit das, was ich bisher probiert getan und probiert habe. So richtig zufrieden bin ich aber nicht - im Vergleich zu Lazarus ist das doch eher alles sehr unbequem.

Also hier ein paar Fragen:

  • Gibt es wirklich keine komfortablere Möglichkeit GUI-Programme für Gtk3 oder Gtk4 zu erstellen?
  • Gibt es andere Sprachen oder besser noch gleich ganze IDEs, die das erlauben.
  • Warum muss aus Glade nun Cambalache werden, wenn der Output doch wieder quasi das gleiche ist?
  • Tipps und Lesequellen zum Selbststudium?

Dankbar für alle Hinweise und Tipps.

Ciao,
Photor

  • ArchChem hat auf diesen Beitrag geantwortet.

    Ich habe in der Vergangenheit in Python 3 GTK3 programmiert. Ich kann aber nicht sagen, dass es komfortabel war.

    3 Monate später

    Ich hätte auch Bock, ein, zwei richtig einfache Anwendungen mit GTK zu entwicklen, die ich so nicht gefunden habe. Präzieser hab ich mich damit auch noch nicht befasst, kann da also nicht allzu viel sagen. ;P Allerdings denke ich in die Richtung:

    1. GTK5 ist im Anmarsch. Ich würde also noch so lange damit warten, meine GUI in GTK umzusetzen, bis GTK5 raus ist, damit man dann nicht sich nochmal die Arbeit machen muss bzw. jetzt nicht unnötige.

    2. Ich würde tatsächlich lieber die GUI als code entwerfen statt mit einem grafischen Baukasten zusammen zu setzen. Erstens lernt man dadurch mehr und zweitens macht man sich eben nicht abhängig von sowas wie Glade. Merkst du ja gerade selber, wo sowas hinführen kann. 😉 Kennt man sich im code selbst aus, kann man auch in Zukunft mit vim und Co. sein Zeug voran bringen ist halt nicht auf fette Moloche angewiesen.

    3. Statt eine große Anwendung zu entwickeln, wo man dann die komplizierteste GUI für braucht, find ich es besser, wenn man mehrere kleine, einfache Anwendungen entwickelt, die ihre Aufgabe gut machen und Standard-output liefern, den wiederum andere Anwendungen verstehen. Wenn man keine komplizierte GUI entwickeln muss, wird auch der code für die GUI übersichtlich und leicht zu warten. KISS halt, keep it small and simple.

    4. Rust klingt finde ich irgendwie zukunftsfähiger als C. ;P

    • Dirk hat auf diesen Beitrag geantwortet.

      Fairy Tail Rust klingt finde ich irgendwie zukunftsfähiger als C.

      Weißt du, so oft wie C schon totgesagt wurde, glaube ich das nicht. Rust ist DAS große Ding gerade, was von allen gehypt wird. Quasi was Go vor ein, zwei Jahren war.

      Zu Go habe ich nie einen draht gefunden. Rust ist das "bessere" C++, Zig ist das "bessere" C.

      Also abseits der Google fanboys war Go doch nicht wirklich hyped. Gute Sprache für gewisse Ziele, aber sonst? Rust dagegen hält sogar mittlerweile in den Linux-Kernel Einzug und man entwickelt sogar ein ganzes eigenes neues Betriebssystem basierend darauf, inklusive vieler Rust rewrites von GNU core utils und anderer Helferlein. Ich denke schon, dass das eine ganz andere Hausnummer ist als Go und auch langsam Stück für Stück C/C++ Anteile abknabbern wird, wie eben auch im Linux-Kernel selbst. Wenn man also neue Betriebssystemanwendungen machen will, finde ich, ist die Aussage schon ganz in Ordnung, dass man da eher Rust nehmen sollte als das alte Pferd C noch reiten zu wollen, auch der besseren Sicherheit wegen. Wenn ich also jetzt so ein neues Projekt starten würde, dann würde ich es in Rust entwickeln und in eine GTK5-GUI packen, sobald GTK5 draußen ist. Btw.: Qt-Zeug sieht imho irgendwie hässlich aus, deswegen GTK. ;P

      Hallo Photor,

      ich bin auch ein Lazarus-Entwickler :-)

      Photor Leider ist Lazarus aber auf Gtk2 stehen geblieben

      Das ist so nicht ganz richtig. Mit der neuen Version 3 gibt es nun stabilen QT6-Support und das funktioniert prima. Wenn du dir vorstellen kannst, auf QT zu wechseln (das kann unter Gnome auch gut aussehen), dann kannst du also ohne Probleme bei Lazarus bleiben.

      Zum Thema GTK: Ich habe oft und schon lange Zeit versucht, mich dort mal reinzudenken. Ich persönlich finde die Dokumentation eher unzureichend. Dann gibt es noch die großen Unterschiede zwischen Gtk3 und Gtk4 und nicht zuletzt noch die Besonderheiten von Libadwaita, sodass man sich schon fragen muss, ob der zeitliche Aufwand für Freizeitprojekte noch verhältnismäßig ist – aber das muss natürlich jeder selber wissen. Bald wird Gtk5 kommen, und da wird wahrscheinlich wieder alles über den Haufen geworfen werden. Ich denke, diese Instabilität ist auch der Grund, warum Lazarus mittlerweile bei Gtk nicht mehr wirklich weiterkommt (oder weiterkommen will...). Es gibt einfach deutlich bessere Alternativen.

      Erwähnenswert ist vielleicht noch Flutter, damit können Anwendungen im Gnome-Stil entwickelt werden, welche gleichzeitig plattformunabhängig sind, schau mal hier: https://pub.dev/packages/libadwaita

      Viele Grüße!

      6 Tage später

      Es wundert mich, dass noch niemand Vala genannt hat. Das ist eine Programmiersprache, die direkt für GTK gemacht worden ist, und neben C m.W. die einzige, die man nehmen darf, wenn man ein offizielles Gnome-Programm werden will.
      Rust mag für betriebssystemnahe Programme eine gute Wahl sein aber für GUIs und insbesondere für GTK? Ich weiß nicht. Von dem Redox-System, dem Betriebssystem, das komplett in Rust geschrieben ist, habe ich auch schon gehört, aber verwendet das jemand? Es gibt auch eine Neuimplemetation des C-Anteils des Emacs in Rust, mit großen Ambitionen, aber die Teile, die den Unterschied zum klassischen Emacs ausmachen sollen, funktionieren alle nicht oder nicht richtig. Also ist meine Euphorie gegenüber Rust doch stark geschrumpft.
      Auf GTK5 würde ich nicht warten. GTK2 und GTK3 haben auch jahrelang koexistiert. Bei GTK3 und GTK4 deutet sich ähnliches an.
      C wird nicht sterben. Die Leute reden seit Jahrzehnten davon, dass es scheiße ist und sterben muss, aber es lebt immer noch, und solange es Programme gibt, die darin geschrieben sind, wird es auch weiterleben.
      Andere schon lange totgesagte Sprachen aus anderen Bereichen (PHP, Perl, Java, Emacs-Lisp) sind auch nicht totzukriegen. Perl wurde immerhin stark von Python und Ruby verdrängt.
      Edit: und von Fortran und Cobol fange ich gar nicht erst an zu reden.

      2 Monate später

      Vala ist leider noch ziemlich verbuggt und die Dokumentation ist nicht sehr vollständig. Es gibt lediglich ein einziges Buch über Vala / Gnome auf Englisch, welches dazu nicht gerade für Einsteiger gedacht ist. Letztendlich wird der Vala Quellcode auch nur zu C kompiliert. Von daher ist good old C und GTK schon eine gute Sache. GTK selbst ist auch in C geschrieben. Zu Go: Go ist an sich ein sehr geiles C, aber leider gibt es nur sehr veraltete, ungepflegte Bindungen zu GTK. Zu Rust kann ich persönlich nur eines sagen: Es ist mir einfach zu aufgeblasen und extrem kryptisch. Nichts für mich.Solange fast alles an Systemsoftware (Kernel) in C geschrieben wird, wird C auch noch weitere Jahrzehnte benutzt. Den kompletten Linuxkernel in Rust neu zu programmieren ? Das wird sich wohl niemand freiwillig antun wollen.

      • schard hat auf diesen Beitrag geantwortet.

        eis Es ist mir einfach zu aufgeblasen und extrem kryptisch.

        Ich finde C-Code weitaus kryptischer zu lesen als Rust Code. Und aufgeblasen finde ich es auch nicht. Die Standardbibliothek bietet nur das allernötigste und für hardwarenahe Programmierung kann man sich sogar weiter auf #![no_std] beschränken.
        Ich habe auf der anderen Seite nur wenige C-Programme gesehen, die nicht auf einer Implementation von libc basieren.

        eis Den kompletten Linuxkernel in Rust neu zu programmieren ? Das wird sich wohl niemand freiwillig antun wollen.

        Das wäre auch recht unsinnig. Linux "funktioniert" zwar, ist aber auch im Design von Altlasten in Architektur und der verwendeten Sprache (C) geprägt. Ich finde da modernere Ansätze, wie z.B. tock viel interessanter.

        Und am Ende zurück zum Thema. Hier ist eine GTK-Anwendung, die ich dereinst für meine alte Firma entwickelt habe: https://github.com/homeinfogmbh/hidslcfg/tree/master/hidslcfg/gui

        • eis gefällt das.