Tutorial
Gtk - Glade3 (RAD)
von TJF | Seite 1 von 1 |
Einführung
Tipp: GTK-Neueinsteigern wird empfohlen, zunächst die Grundlagen-Tutorials zum Thema durchzugehen: GTK-Einführung
Glade3 ist ein Programm mit dem grafische Bedienungsoberflächen (GUI = graphical user interface) für GTK erstellt werden können. Es kann mit FreeBasic (FB) verwendet werden und erspart dem Programmierer die zeilenweise Erstellung einzelner Bedienelemente (Widgets). Stattdessen werden auf der grafischen Oberfläche von Glade3 ein oder mehrere Fenster erstellt und das Ergebnis in einer GladeXML-Datei gespeichert. Diese Datei wird im FB-Quelltext mit Hilfe der GladeLIB geladen und angewendet. Der Zugriff auf die Widgets erfolgt durch Zeigervariablen (PTR) und durch Signale.
Glade3 ist also ein Tool für die schnelle Programmentwicklung (rapid application development = RAD). In Glade3 können die Widgets des GUI zusammengestellt und parametrisiert werden. Auch ist es möglich, die Oberfläche bis zu einem gewissen Grad zu erproben, also z.B. das Aussehen bei Veränderungen der Fenstergröße zu begutachten. Eine gespeicherte GladeXML-Datei kann wieder geladen und weiter editiert werden.
Glade3 ist für Win32 und für Linux als Binary verfügbar, Download-Links sind weiter unten zusammengefasst. Die aktuelle Version ist 3.6.7 vom 29.06.2009. Eine erstellte GladeXML-Dateien kann auf beiden Betriebssystemen verwendet werden.
Anmerkung:
1.) Die GladeXML-Datei kann nicht nur mit der GladeLIB, sondern auch über die Funktionen des GtkBuilder verwendet werden, welche ab GTK-Version 2.12 verfügbar sind. Die FB-GTK-Anbindung (gtk.bi) ist leider nicht auf dem aktuellen Stand, sondern betrifft GTK-Version 2.10 (oder 2.08?). Daher wird in diesem Tutorial nur die Verwendung von GladeLIB beschrieben.
2.) Wegen der veralteten FB-GTK-Anbindung ist es für Anfänger sinnvoll, die GTK-Dokumentation von Version 2.10 zu verwenden (oder die gtk.bi und alle Folgedateien auf den aktuellen Stand (2.18) zu bringen und hier zu veröffentlichen ;-).
Beispiel
Ein FB-Programm, welches die GladeXML-Datei "MEINE_XML.glade" nutzt, sieht typischerweise wie folgt aus:
' Beispiel: Verwendung einer GladeXML-Datei in FreeBasic
' Copyright nach GPLv3: Thomas.Freiherr@gmx.net
' Zunächst die Anbindung an die Funktionen der GTK-LIB (DLLs))
#INCLUDE "gtk/gtk.bi"
' und die Anbindung an die Funktionen der Glade-LIB (DLL)
#INCLUDE "gtk/libglade/glade-xml.bi"
' dann GTK initialisieren
gtk_init(@__FB_ARGC__, @__FB_ARGV__)
' hier kann eigener Quelltext einfügt werden, welcher keinen Bezug
' zu der Oberfläche (GUI) hat, also deren Widgets nicht benötigt.
' Hier wird das GUI (die GladeXML-Datei) geladen: erst PTR
' dimensionieren, dann Laden der GladeXML-Datei durch eine
' Glade-LIB Funktion
DIM SHARED AS GladeXML PTR XML
XML = glade_xml_new("MEINE_XML.glade", 0, 0)
' Ab hier ist das GUI mit allen Widgets verfügbar. Ein Widget der
' GladeXML-Datei wird über einen Zeiger angesprochen:
DIM SHARED AS GtkWidget PTR WinMain
WinMain = glade_xml_get_widget(XML, "WinMain")
' Anm.: Der Name "WinMain" wurde dem Widget im Programm Glade3
' zugewiesen (er kann identisch zu dem FB-Variablennamen sein,
' muss es aber nicht).
' hier kann eigener Quelltext einfügt werden, welcher Bezug zu der
' Oberfläche (GUI) hat, also auf deren Widgets zugreift.
' Insbesondere werden hier Callback-SUBs/Funktionen erstellt,
' welche auf Signale reagieren. Die Namen der Callbacks werden in
' Glade3 definiert, die Parameterliste ist entsprechend dem
' verwendeten Signal anzupassen. Für die meisten Signale werden
' zwei Parameter wie folgt übergeben:
SUB on_ButDatei_clicked CDECL ALIAS "on_ButDatei_clicked" _
(BYVAL object AS GTKOBJECT PTR, _
BYVAL user_data AS GPOINTER) EXPORT
PRINT "on_ButDatei_clicked!"
END SUB
' Anm.: Das Widget "ButDatei" wurde in Glade3 als GtkButton
' erzeugt, benannt und mit dem Signal "clicked" verbunden.
' Anm.: Die Befehle CDECL, ALIAS und EXPORT sind wichtig!
' alle in der GladeXML-Datei definierten Signale werden mit den
' FB-Callbacks durch diese Funktion verbunden
glade_xml_signal_autoconnect(XML)
' Anm.: Für jedes Signal muss die entsprechende FB-SUB/Funktion
' (Callback) bis zu dieser Stelle definiert oder deklariert sein.
' hier wird das Hauptfenster der GladeXML-Datei dargestellt
gtk_widget_show_all(WinMain)
' Jetzt kann die GTK-Mainloop gestartet werden (Warten auf
' Aktionen des Anwenders)
gtk_main()
' Anm.: Die Mainloop läuft endlos, solange sie nicht durch die
' Funktion gtk-main-quit() unterbrochen wird. Diese kann
' entweder in einem Callback des FB-Quelltextes aufgerufen
' werden oder sie wird in Glade3 mit einem Signal eines Widgets
' verbunden (z.B. Widget "WinMain" -> Signal "delete-event").
' Nach dem Ende der Mainloop wird der Speicherplatz der
' GladeXML-Datei wieder freigegeben
g_object_unref(XML)
' Hier kann weiterer Quelltext einfügt werden, in welchem das
' GUI nicht benötigt wird, z.B. um Parameter zu speichern (Hier
' ist ein Zugriff auf die Widget nicht mehr möglich möglich.)
END 0 ' Ende mit Returncode 0
Die Datei "MEINE_XML.glade" muss sich im Verzeichnis der FB-Quelltext-Datei befinden. Es ist sinnvoll, den FB-Quelltext und die GladeXML-Datei identisch zu benennen (z.B. "MEINE_XML.bas" und "MEINE_XML.glade").
Oberflächenerstellung
GTK-Oberflächen unterscheiden sich von Windows-Oberflächen teilweise erheblich. Z.B. ist es unter GTK-Anwendern verpöhnt, feste Fenstergrößen und Widgetpositionen zu verwenden. GTK bietet vielfältige Möglichkeiten, die Widgets flexibel zu gestalten. Dazu zählen verschiedenste Zeichensätze (UTF8-Kodierung, mehrsprachiges GUI), unterschiedliche Themen (Gestaltung/Aussehen der Widgets) oder auch die Verwendung beliebiger Fontgrößen (z.B. große Fonts für Nutzer mit Sehbehinderung, kleine für Handyprogramme). Daher wird bei GTK die Verwendung von Rahmen mit festen Größen und Widgetpositionen (GtkFixed) möglichst vermieden. Stattdessen werden Widgets relativ zueinander gepackt (angeordnet), wodurch eine nahezu freie Wahl der GUI-Größe möglich wird (GtkHbox, GtkVbox, GtkTable, GtkScrolled, ...).
Glade3 dient überwiegend der Zusammenstellung, Anordnung und Parametrisierung der Widgets. In einigen Fällen werden nur Platzhalter für Widgets erzeugt und der eigentliche Inhalt muss bzw. darf durch FB-Quelltext erzeugt werden (z.B. GtkLayout, GtkTreeView, Gtk IconView, GtkTextView).
Beispiele/Hilfsprogramme
Eine gute Anleitung zur Erstellung einer "Hallo Welt"-GladeXML-Datei ist über den u.g. Link "Glade3 Einführung" verfügbar. Die beschriebene "HalloWelt.xml"-Datei, sowie ein weiteres Tutorial zu deren Anwendung im FB-Quelltext sind im u.g. Paket "GTK+tobac" enthalten.
Die Erstellung des FB-Quelltextes für die Anwendung der GladeXML-Dateien kann automatisiert werden. Hierzu sind nach aktuellen Stand folgende Tools verfügbar (jeweils für Win32 und Linux):
- Glade2Bas
- GTK+tobac
- Glade2FB
- GTK+tobac2
Diese Tools sind jeweils in FB programmiert und als Binaries zusammen mit dem Quelltext publiziert. Die Quelltexte können gut als Beispiele für die Anwendung von GladeXML-Dateien verwendet werden.
Die Anwendung dieser Tools ist grundsätzlich ähnlich. Zuerst wird eine GladeXML-Datei erstellt. Dann wird das Tool gestartet und die GladeXML-Datei wird geladen/ausgewählt. Auf Knopftdruck erzeugt das Tool schließlich eine FB-Quelltext-Datei, also einen Programmrahmen zur Anwendung der GladeXML-Datei - ähnlich dem obigen Beispiel.
Dieser Programmrahmen enthält also Funktionen zur Initialisierung von GTK, zum Laden der GladeXML-Datei und zum Start der GTK-Mainloop. Der Programmrahmen (Quelltext-Datei) kann und soll vom FB-Programmierer mit eigener Funktionalität ergänzt werden.
Die Tools unterscheiden sich jedoch in der Art des erzeugten Quelltextes. Bei Glade2Bas und Glade2FB wird immer eine neue FB-Quelltext-Datei erzeugt und ggf. ein Backup der letzten Version erstellt. Nach einer Änderung oder Ergänzung der GladeXML-Datei muss also der Quelltext neu bearbeitet werden. Glade2FB erzeugt neben dem FB-Quelltext auf Wunsch zusätzlich Projekt-Dateien für verschiedene IDEs.
Die Tools GTK+tobac und GTK+tobac2 dagegen überschreiben vorhandene Quelltext-Dateien nicht. GTK+tobac2 schreibt ebenso Projektdateien für verschiedene IDEs und erledigt zusätzlich die Referenzierung der Widgets, welche bei der Erstellung der GladeXML-Datei benannt wurden. Die PTR-Variablen zum Ansprechen der Widgets sind also automatisch im FB-Quelltext verfügbar. Beide GTK+tobac-Versionen können die GladeXML-Datei in den FB-Quelltext einbinden.
Obwohl GTK+tobac nicht mehr weiterentwickelt wird, ist das Paket für Anfänger wegen des Beispiels interessant. Die Quelltext-Dateien von GTK+tobac und GTK+tobac2 sind nicht kompatibel, der Umstieg von GTK+tobac zu GTK+tobac2 ist jedoch mit geringem Aufwand möglich.
Downloads
Zusätzliche Informationen
und weiterführende Links sind auf folgenden Seiten zu finden:
- Glade3 Homepage (en)
- Glade3 Wikipedia (en)
- Glade3 Einführung (de)
- GladeXML Anwendung mit GTK+tobac (de/en)
Außerdem finden sich Anwenderinformationen in den Liesmich.txt-Dateien der u.g. Pakete.
Linux
Die Glade3-, libglade- und und GTK-Pakete sind in den meisten Distributionen bereits enthalten. Ggf. können sie installiert werden, indem folgender Befehl mit Administratoren-Zugriffsrechten ausgeführt wird:
sudo apt-get install glade libglade2-0 libgtk2.0-0
Anm: Beispiel für Ubuntu-Linux
Die FB-Tools können wie folgt bezogen werden
Win32
Zunächst ist das Programm Glade3 erforderlich. Es ist auch in Kombination mit GTK verfügbar:
- Glade3.6.4 (2,9 MB - de/en)
- [url=http://ftp.gnome.org/pub/GNOME/binaries/win32/glade3/3.6/glade3-3.6.7-with-GTK+.exe]Glade3.6.7 inkl. GTK (17 MB - de/en)[/url]
Die GladeLIB ermöglicht die Anwendung der GladeXML-Datei mit GTK-Versionen < 2.12:
Nach dem Download wird das Zip-Archiv entpackt und die dll-Datei aus dem "bin"-Ordner in ein Verzeichnis installiert, welches in der PATH-Variable des Betriebssystemes enthalten ist (z.B. im "bin"-Ordner der GTK-Installation, oder ersatzweise in das Verzeichnis der erstellten *.exe-Datei).
Die FB-Tools können wie folgt bezogen werden
Source
Glade3 ist Quelloffen und der C-Sourcecode ist verfügbar:
Die Quelltexte der FB-Tools sind in den Paketen enthalten:
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|