Bitte warten...

GTK+ 3: Layout-Widgets

Gtk.Grid

► GTK+ 3 Dokumentation: Gtk.Grid

Das Widget Gtk.Grid 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

Code kopieren
        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)

Gtk.Box

► GTK+ 3 Dokumentation: Gtk.Box
► Python GTK+ 3 Tutorial: Boxes

Die einzelnen Widgets einer Oberfläche werden üblicherweise in einer Gtk.Box 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.

Code kopieren
        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)

Gtk.Notebook

► GTK+ 3 Dokumentation: Gtk.Notebook

Das Widget Gtk.Notebook 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.

Code kopieren
        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)

Gtk.Frame

► GTK+ 3 Dokumentation: Gtk.Frame

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

Code kopieren
        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)

Gtk.ScrolledWindow

► GTK+ 3 Dokumentation: Gtk.ScrolledWindow

Das Widget Gtk.ScrolledWindow 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 Gtk.ScrolledWindow hinzugefügt werden. Kindwidgets, die natives Scrollen nicht unterstützen, werden mit add_with_viewport() hinzugefügt. Siehe Gtk.Viewport.

Code kopieren
        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)

Gtk.Viewport

► GTK+ 3 Dokumentation: Gtk.Viewport

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

Code kopieren
        self.viewport01 = Gtk.Viewport()
        self.scrolledwindow01.add(self.viewport01)

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

Gtk.TextView

► GTK+ 3 Dokumentation: Gtk.TextView Gtk.TextBuffer

Das Widget Gtk.TextView erzeugt einen Bereich, in den mit Gtk.TextBuffer ein Text eingefügt werden kann.

Code kopieren
        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)

Gtk.Label

► GTK+ 3 Dokumentation: Gtk.Label
► Pango Dokumentation: Text Attribute Markup

Mit Hilfe des Widgets Gtk.Label 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_text() wird dem Label ein Text zugewiesen.
Mit set_markup() kann das Label mit Pango-Markup (ähnlich wie mit CSS) formatiert werden.
Mit set_halign() kann die horizontale Ausrichtung des Widgets festgelegt werden. Hier mit Gtk.Align.END nach rechts.

Code kopieren
        self.label01 = Gtk.Label()
        self.label01.set_text("Ich bin ein Label")
        self.label01.set_markup("<span font_family='monospace'>Ich bin ein Label</span>")
        self.label01.set_halign(Gtk.Align.END)
        self.box01.pack_start(self.label01, True, True, 0)

Gtk.Image

► GTK+ 3 Dokumentation: Gtk.Image

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

Code kopieren
        self.image01 = Gtk.Image.new_from_file("/usr/share/pixmaps/python3.xpm")
        self.box02.pack_start(self.image01, False, False, 0)

Gtk.Statusbar

► GTK+ 3 Dokumentation: Gtk.Statusbar

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

Code kopieren
        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!")

Gtk.ProgressBar

► GTK+ 3 Dokumentation: Gtk.ProgressBar

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

Code kopieren
        self.progressbar01 = Gtk.ProgressBar()
        self.progressbar01.set_fraction(.7)
        self.box02.pack_start(self.progressbar01, True, True, 6)

Gtk.DrawingArea

► GTK+ 3 Dokumentation: Gtk.DrawingArea

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

Code kopieren
        self.drawingarea01 = Gtk.DrawingArea()
        self.drawingarea01.connect('draw', self.draw_something)
        self.box04.pack_start(self.drawingarea01, True, True, 0)