Camba ... what? Das spanische Wort 'Cambalache' bedeutet auf Deutsch soviel wie Tausch, Umtausch, Tauschböre oder Tauschgeschäft. Wie passt das zum Nachfolger von Glade, dem Gtk-GUI-Entwurfsprogramm? Die Umwandlung eines GUI-Entwurfs in einen Programmcode könnte man durchaus als Umtausch bezeichnen.
Nachdem die Entwicklung von Glade am 4. Oktober 2020 eingestellt wurde, fehlte eine Entwurfsumgebung für Gtk4-Anwendungen. Der Hauptentwickler von Glade, Juan Pablo Ugarte, sah ein, dass es besser wäre, eine neue Applikation für Gtk4 zu schreiben, anstatt Glade von Gtk3 auf die neue Version der Bibliothek zu migrieren. Als Grund dafür nennt er die grossen Unterschiede im Unterbau von Gtk4 im Vergleich zu Gtk3. Schauen wir uns an, was Cambalache als Nachfolger von Glade leistet:
Zu Testzwecken habe ich das Flatpak von Cambalache in der aktuellen Version 0.8.2 installiert. Mein erster Eindruck ist, dass Cambalache genauso aussieht wie Glade und sich genauso bedienen lässt wie Glade. Dies verwundert nicht, da es vom selben Entwickler stammt. Allerdings erscheint mir diese Version noch ziemlich unfertig zu sein; dazu später mehr.
Erstellt man ein neues Projekt, kann zwischen Gtk3 und Gtk4 gewählt werden. Das Werkzeug selbst ist eine Gtk4-Anwendung. Der Aufbau der Oberfläche ist einfach und sinnvoll gestaltet: links gibt es den Widget-Baum, in der Mitte das grafische Entwurfsfenster und rechts findet man ein Panel mit den Widget-Eigenschaften, ihrem Layout und den Signalen. Über dem Entwurfsfenster gibt es eine nach Kategorien unterteilte Auswahl der Gtk-Widgets. Dort kann man in Dropdowns auswählen oder mit der Lupe über den Namen die Widgets suchen. Nach der Auswahl klickt man in das Entwurfsfenster, um ein Widget hinzuzufügen.
Das klingt alles sehr einfach und intuitiv, ist es aber nicht. Man stösst sehr schnell an Grenzen, falls man das Konzept von Gtk und die Bedeutung der Widgets nicht kennt. Daher empfiehlt es sich eine Einführung in Gtk zu lesen, bevor man den GUI-Entwurf frustriert abbricht. Hier sind ein paar Tutorial- und Referenzen-Tipps:
- https://www.gtk.org/docs/
- https://github.com/Taiko2k/GTK4PythonTutorial
- https://zetcode.com/python/gtk/
- https://www.python-forum.de/
- https://developer-old.gnome.org/gtk4/stable/
Ein Grundkonzept von Gtk ist es, dass die Elemente (Widgets) nicht absolut, sondern relativ positioniert werden. Dies geschieht über diverse Layout-Widgets (z.B. Boxen) welche sich darum kümmern, wie die darin enthaltenen Elemente (z.B. Buttons) ausgerichtet werden. Man muss sich nicht selbst um die Position oder die Ausmasse eines Widgets kümmern. Das ist ein grosser Vorteil von Gtk, da die Widgets in Abhängigkeit von der Fenstergrösse optimal skalieren. Ausserdem ist es von grosser Bedeutung, die wesentlichen Widgets zu kennen. Anderenfalls weiss man nicht, welches Element mit welchem anderen Element zusammenspielt.
Nun zurück zu Cambalache: Die Entwurfansicht kann in eine Code-Ansicht umgeschaltet werden. Dies geschieht mit einem Rechtsklick in den Entwurfsbereich und der Auswahl von 'UI-Definition überprüfen'. Man sieht dann das XML, welches den GUI-Entwurf beschreibt. Diesen Code muss man kopieren und in eine Datei mit der Endung '*.ui' speichern, um die grafische Oberfläche später in einem Programm verwenden zu können. Es gibt zwar im Werkzeug die Option, diese UI-Datei zu exportieren (bei den Eigenschaften des Root-Elements links in der Baumansicht), allerdings funktioniert das nicht.
Ausserdem ist mir aufgefallen, dass man beim Scrollen mit dem Mausrad im Eigenschaften-Panel höllisch aufpassen muss, dass man nicht versehentlich die Werte ändert, statt das Panel hoch- oder runterzuschieben. Hier sollte man vorsichtshalber den Scrollbar des Windows verwenden, um nicht die Werte der letzten Einstellung zu ändern, in der man sich befunden hat.
Beim Hinzufügen neuer Widgets hatte ich oft Misserfolg, weil das Widget nicht hinzugefügt wurde. Ob das an Cambalache oder an meiner Unwissenheit liegt, kann ich nicht beurteilen. Beispiel gefällig? Versucht doch mal mehr, als drei Buttons in eine Box einzufügen, ohne dafür Copy&Paste im Widgetbaum zu verwenden. Generell vermisse ich eine Dokumentation des Werkzeugs. Zwar gibt es eine 'interaktive Tour', die mit einem Button in der Kopfzeile gestartet werden kann; diese enthält jedoch nur Trivialitäten und hätte zugunsten einer Dokumentation weggelassen hätte werden können.
Das Öffnen von zuletzt verwendeten Dateien funktioniert in Cambalache noch nicht, obwohl diese Funktion angeboten wird. Man muss die *.cmb-Datei manuell öffnen. Was auch nicht funktioniert, ist die Vorschau des entworfenen GUIs. Dazu gibt es im Hamburger-Menü den seltsam benannten Eintrag 'Projektdaten debuggen', welcher besser 'Vorschau' heissen sollte. Das Funktionieren dieser Option wäre wichtig, weil damit ein Prototyp des GUIs generiert wird, in dem man die bisherige Arbeit überprüfen kann.
Die Verwendung der *.ui-Datei in einer Programmdatei konnte ich nicht ausprobieren, weil ich keine Beispiele für Gtk4-Python gefunden habe. Der Gtk3-Code funktioniert nicht mehr. Man muss wissen, dass Gtk4 in erster Linie für C++ Programme ausgelegt ist. Python sitzt hier in der zweiten Reihe und wartet auf Beispiele und Dokumentation, wie es sie für Gtk3 reichlich gibt, zum Beispiel hier.
Fazit
Cambalache ist ein würdiger Nachfolger für Glade, befindet sich jedoch in einem frühen Entwicklungsstadium. Jeder, der einmal Glade verwendet hat, findet sich in Cambalache sofort zurecht. Wer mit den Seltsamkeiten von Glade zurechtgekommen ist, wird auch mit dem Nachfolger viele/keine Probleme haben. Vor dem Einsatz dieses Entwurfsprogramms ist ein Grundwissen von Gtk zwingend erforderlich. Allen Einsteigern empfehle ich mit reinem GUI-Code zu beginnen, bevor man sich die zusätzliche Abstraktionsschicht eines GUI-Builders zunutze macht.
Info: Das Tool basiert aktuell (noch) auf Gtk3. Der Haupt-Entwickler will es auf Gtk4 umstellen, wenn Cambalache alle nötigen Funktionen hat, um die UI-Dateien für Cambalache zu erstellen. Die Exportieren-Funktion müsste übrigens funktionieren. Du kannst ja mal den Quellcode herunterladen, per Python ausführen und gucken, ob es im Terminal einen Fehler gibt. Diesen wäre es nett zu melden, um Cambalache zu verbessern. Zum Hinzufügen von Widgets gibt es einen Trick, um Widgets hinzuzufügen, die noch nicht (komplett) unterstützt werden. Man muss (bevor man das Widget oben ausgewählt hat) die Alt-Taste drücken, das Widget auswählen, den Platzhalter auswählen und die Alt-Taste loslassen. Dazu gibt es in der aktuell noch nicht veröffentlichten Version auch einen Hinweis direkt im Tool.