decocode decocode deco    

GTK+ 3: Layout-Widgets #

GtkGrid #

► GTK+ 3 Dokumentation: GtkGrid

Das Widget GtkGrid erzeugt ein Raster, in dem Kindwidgets platziert werden können. Kindwidgets werden mit attach() hinzugefügt, wobei fünf Argumente übergeben werden müssen:

1. das Kindwidget
2. die horizontale Position
3. die vertikale Position
4. die horizontale Ausdehnung
5. die vertikale Ausdehnung

Quelltext auswählen
1
2
3
4
5
6
7
8
9
10
11
        self.grid01 = Gtk.Grid()
        self.box02.pack_start(self.grid01, True, True, 6)

        self.button01 = Gtk.Button(label="Button 1")
        self.grid01.attach(self.button01, 0, 0, 1, 1)

        self.button02 = Gtk.Button(label="Button 2")
        self.grid01.attach(self.button02, 1, 0, 1, 2)

        self.button03 = Gtk.Button(label="Button 3")
        self.grid01.attach(self.button03, 0, 1, 1, 1)

GtkBox #

► GTK+ 3 Dokumentation: GtkBox
► Python GTK+ 3 Tutorial: Boxes

Die einzelnen Widgets einer Oberfläche werden üblicherweise in einer GtkBox angeordnet.

Die Eigenschaft orientation gibt an, ob Kindwidgets neben- oder untereinander platziert werden.
Die Eigenschaft homogeneous gibt an, ob Kindwidgets gleich groß sein sollen.
Die Eigenschaft spacing gibt den Abstand in Pixeln zwischen den Kindwidgets an.

Kindwidgets können mit Hilfe von pack_start() hinzugefügt werden. Als Attribute von pack_start() werden das Kindwidget sowie Flags für die Ausdehung (expand) und das Füllverhalten (fill) übergeben. Das letzte Attribut gibt die Anzahl der Pixel an, mit denen das Widget in Richtung der Orientierung der Elternbox umgeben wird (padding).

Ist der Wert für die Ausdehnung True, wird das Widget in Richtung der Orientierung der Elternbox ausgedehnt, wenn das Fenster vergrößert wird.

Ist der Wert für das Füllverhalten True, wird der das Widget umgebende Bereich in Richtung der Orientierung der Elternbox ausgedehnt, wenn das Fenster vergrößert wird.

Quelltext auswählen
1
2
3
4
5
6
7
8
        self.box01 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=10)
        self.add(self.box01)

        self.button01 = Gtk.Button(label="Klick mich!")
        self.box01.pack_start(self.button01, True, True, 0)

        self.button02 = Gtk.Button(label="oder mich")
        self.box01.pack_start(self.button02, True, True, 0)

GtkNotebook #

► GTK+ 3 Dokumentation: GtkNotebook

Das Widget GtkNotebook erzeugt ein Element, das ähnlicher einer Registerkarte funktioniert. Dem Widget können beliebige Seiten hinzugefügt werden, die über ihre Tabs oder Reiter ausgewählt werden können.

Mit set_current_page() kann die aktuelle Seite des Notebooks eingestellt werden, sofern die Kindelemente sichtbar sind.

Quelltext auswählen
1
2
3
4
5
6
7
8
9
10
11
12
13
        self.notebook01 = Gtk.Notebook()
        self.add(self.notebook01)

        self.box02 = Gtk.Box(False, 0)
        self.label02 = Gtk.Label("Seite 1")
        self.notebook01.insert_page(self.box02, self.label02, 0)

        self.box03 = Gtk.Box(False, 0)
        self.label03 = Gtk.Label("Seite 2")
        self.notebook01.insert_page(self.box03, self.label03, 1)

        self.show_all()
        self.notebook01.set_current_page(1)

GtkFrame #

► GTK+ 3 Dokumentation: GtkFrame

Das Widget GtkFrame erzeugt um die enthaltenen Kindelemente einen Rahmen, der mit einem Label versehen werden kann.

Quelltext auswählen
1
2
3
        self.frame01 = Gtk.Frame(label="Frame 1")
        self.frame01.set_shadow_type(Gtk.ShadowType.ETCHED_OUT)
        self.box02.pack_start(self.frame01, True, True, 0)

GtkScrolledWindow #

► GTK+ 3 Dokumentation: GtkScrolledWindow

Das Widget GtkScrolledWindow erzeugt einen Container, der mit Scrollbalken versehen werden kann, falls sein Inhalt mehr als den zur Verfügung stehenden Platz benötigt.

Über die Funktion set_policy() kann angegeben werden, in welchen Situationen die Scrollbalken angezeigt werden. Das erste Argument legt das Verhalten für den horizontalen Scrollbalken fest, das zweite für den vertikalen. Mögliche Werte sind:

Gtk.PolicyType.ALWAYS - immer
Gtk.PolicyType.NEVER - niemals
Gtk.PolicyType.AUTOMATIC - nur bei Bedarf

Kindwidgets, die natives Scrollen unterstützen, können mit add() zum GtkScrolledWindow hinzugefügt werden. Kindwidgets, die natives Scrollen nicht unterstützen, werden mit add_with_viewport() hinzugefügt. Siehe GtkViewport.

Quelltext auswählen
1
2
3
4
5
6
7
8
9
10
11
        self.scrolledwindow01 = Gtk.ScrolledWindow()
        self.scrolledwindow01.set_policy(Gtk.PolicyType.ALWAYS, Gtk.PolicyType.ALWAYS)
        self.scrolledwindow01.set_shadow_type(Gtk.ShadowType.IN)
        self.box02.pack_start(self.scrolledwindow01, True, True, 0)

        self.textview01 = Gtk.TextView()
        self.scrolledwindow01.add(self.textview01)

        # oder:
        self.box03 = Gtk.Box(False, 0)
        self.scrolledwindow01.add_with_viewport(self.box03)

GtkViewport #

► GTK+ 3 Dokumentation: GtkViewport

Bestimmte Widgets, die kein natives Scrollen unterstützen, können nur innerhalb eines GtkViewport zu einem GtkScrolledWindow hinzugefügt werden. Entweder man fügt sie per add_with_viewport() hinzu oder bettet sie zunächst in ein GtkViewport ein.

Quelltext auswählen
1
2
3
4
5
        self.viewport01 = Gtk.Viewport()
        self.scrolledwindow01.add(self.viewport01)

        self.box03 = Gtk.Box(False, 0)
        self.viewport01.add(self.box03)

GtkTextView #

► GTK+ 3 Dokumentation: GtkTextView GtkTextBuffer

Das Widget GtkTextView erzeugt einen Bereich, in den mit GtkTextBuffer ein Text eingefügt werden kann.

Quelltext auswählen
1
2
3
4
5
6
7
8
9
        self.textview01 = Gtk.TextView()
        self.textview01.set_cursor_visible(False)
        self.textview01.set_left_margin(20)
        self.textview01.set_right_margin(20)
        self.box03.pack_start(self.textview01, True, True, 0)

        self.textbuffer01 = Gtk.TextBuffer()
        self.textbuffer01.set_text("Lorem ipsum dolor sit amet,\nconsetetur sadipscing elitr, sed diam nonumy\neirmod tempor invidunt ut labore\net dolore magna aliquyam erat,\nsed diam voluptua. At vero\neos et accusam et justo\nduo dolores et ea rebum.\nStet clita kasd gubergren,\nno sea takimata sanctus est\nLorem ipsum dolor sit amet.\nLorem ipsum dolor sit amet,\nconsetetur sadipscing elitr,\nsed diam nonumy eirmod\ntempor invidunt ut labore\net dolore magna aliquyam\nerat, sed diam voluptua. At vero\neos et accusam et justo duo dolores\net ea rebum. Stet clita kasd gubergren,\nno sea takimata sanctus est Lorem\nipsum dolor sit amet.")
        self.textview01.set_buffer(self.textbuffer01)

GtkLabel #

► GTK+ 3 Dokumentation: GtkLabel
► Pango Dokumentation: Text Attribute Markup

Mit Hilfe des Widgets GtkLabel können kurze Textstücke in eine Oberfläche eingebunden werden. Diese dienen häufig zur Beschreibung anderer Widgets. Der gewünschte Text wird als Attribut übergeben.

Mit set_markup() kann das Label mit Pango-Markup (ähnlich wie mit CSS) formatiert werden.

Quelltext auswählen
1
2
3
        self.label01 = Gtk.Label("Ich bin ein Label")
        self.label01.set_markup("<span font_family='monospace'>Ich bin ein Label</span>")
        self.box01.pack_start(self.label01, True, True, 0)

GtkImage #

► GTK+ 3 Dokumentation: GtkImage

Mit Hilfe des Widgets GtkImage kann eine Grafik angezeigt werden. Der Pfad zu der Grafik kann mit new_from_file() angegeben werden.

Quelltext auswählen
1
2
        self.image01 = Gtk.Image.new_from_file("/usr/share/pixmaps/python.xpm")
        self.box02.pack_start(self.image01, False, False, 0)

GtkStatusbar #

► GTK+ 3 Dokumentation: GtkStatusbar

Das Widget GtkStatusbar stellt eine Statuszeile zur Verfügung, die üblicherweise den unteren Abschluss eines Anwendungsfensters bildet. Der Text der Statuszeile kann mit push() aktualisiert werden.

Quelltext auswählen
1
2
3
4
5
        self.statusbar01 = Gtk.Statusbar()
        self.box01.pack_start(self.statusbar01, False, False, 0)
        self.context_id = self.statusbar01.get_context_id("status")

        self.statusbar01.push(self.context_id, "Hallo Welt!")

GtkProgressBar #

► GTK+ 3 Dokumentation: GtkProgressBar

Das Widget GtkProgressBar erzeugt einen Fortschrittsbalken, dessen Zustand mit set_fraction() eingestellt werden kann.

Quelltext auswählen
1
2
3
        self.progressbar01 = Gtk.ProgressBar()
        self.progressbar01.set_fraction(.7)
        self.box02.pack_start(self.progressbar01, True, True, 6)

GtkDrawingArea #

► GTK+ 3 Dokumentation: GtkDrawingArea

Das Widget GtkDrawingArea erzeugt einen Bereich, in dem mit Hilfe der Cairo-Bibliothek Vektorgrafiken erstellt werden können. Siehe auch Cairo-Grafiken.

Quelltext auswählen
1
2
3
        self.drawingarea01 = Gtk.DrawingArea()
        self.drawingarea01.connect('draw', self.draw_something)
        self.box04.pack_start(self.drawingarea01, True, True, 0)