Bitte warten...

GTK+ 3: Interaktions-Widgets

Gtk.Toolbar

► GTK+ 3 Dokumentation: Gtk.Toolbar Gtk.ToolButton Gtk.SeparatorToolItem

Das Widget Gtk.Toolbar erzeugt eine Werkzeugleiste, die anklickbare Icons in Form des Widgets Gtk.ToolButton enthalten kann. Systemeigene Icons können über die Eigenschaft icon_name ausgewählt werden; der Name des Icons entspricht dabei der Vorgabe aus der Freedesktop.org Icon Naming Specification. Gruppen von Icons können mit dem Widget Gtk.SeparatorToolItem getrennt werden. Ein Icon wird mit insert() der Werkzeugleiste hinzugefügt.

Wird ein Icon angeklickt, so löst diese Aktion das Signal clicked aus, das mit einer entsprechenden Funktion verknüpft werden kann.

Code kopieren
        self.toolbar01 = Gtk.Toolbar()
        self.box01.pack_start(self.toolbar01, False, False, 0)
        self.toolbutton01 = Gtk.ToolButton(icon_name="document-open")
        self.toolbutton01.connect('clicked', self.on_toolbutton01_clicked)
        self.toolbar01.insert(self.toolbutton01, 0)
        self.toolbutton02 = Gtk.ToolButton(icon_name="document-new")
        self.toolbar01.insert(self.toolbutton02, 1)
        self.separatortoolitem01 = Gtk.SeparatorToolItem()
        self.toolbar01.insert(self.separatortoolitem01, 2)
        self.toolbutton03 = Gtk.ToolButton(icon_name="help-about")
        self.toolbar01.insert(self.toolbutton03, 3)

Das folgende Python-Skript erzeugt eine Liste aller verfügbaren Icons:

Code kopieren
#!/usr/bin/python3
# -*- coding: utf-8 -*-

# dependencies: python3-gi

"""
This program displays a list of all desktop icons along with their names listed on https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html .
Coded by Holger Löwenherz, decocode.de, May 2021
"""

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class MyWindow(Gtk.Window):
    
    def __init__(self):
        
        Gtk.Window.__init__(self, title="Desktop Icons")
        self.set_icon_from_file("/usr/share/pixmaps/python3.xpm")
        self.set_position(Gtk.WindowPosition.CENTER)
        self.set_default_size(300, 400)
        self.set_border_width(6)
        
        names = ["address-book-new", "application-exit", "appointment-new", "call-start", "call-stop", "contact-new", "document-new", "document-open", "document-open-recent", "document-page-setup", "document-print", "document-print-preview", "document-properties", "document-revert", "document-save", "document-save-as", "document-send", "edit-clear", "edit-copy", "edit-cut", "edit-delete", "edit-find", "edit-find-replace", "edit-paste", "edit-redo", "edit-select-all", "edit-undo", "folder-new", "format-indent-less", "format-indent-more", "format-justify-center", "format-justify-fill", "format-justify-left", "format-justify-right", "format-text-direction-ltr", "format-text-direction-rtl", "format-text-bold", "format-text-italic", "format-text-underline", "format-text-strikethrough", "go-bottom", "go-down", "go-first", "go-home", "go-jump", "go-last", "go-next", "go-previous", "go-top", "go-up", "help-about", "help-contents", "help-faq", "insert-image", "insert-link", "insert-object", "insert-text", "list-add", "list-remove", "mail-forward", "mail-mark-important", "mail-mark-junk", "mail-mark-notjunk", "mail-mark-read", "mail-mark-unread", "mail-message-new", "mail-reply-all", "mail-reply-sender", "mail-send", "mail-send-receive", "media-eject", "media-playback-pause", "media-playback-start", "media-playback-stop", "media-record", "media-seek-backward", "media-seek-forward", "media-skip-backward", "media-skip-forward", "object-flip-horizontal", "object-flip-vertical", "object-rotate-left", "object-rotate-right", "process-stop", "system-lock-screen", "system-log-out", "system-run", "system-search", "system-reboot", "system-shutdown", "tools-check-spelling", "view-fullscreen", "view-refresh", "view-restore", "view-sort-ascending", "view-sort-descending", "window-close", "window-new", "zoom-fit-best", "zoom-in", "zoom-original", "zoom-out", "process-working", "accessories-calculator", "accessories-character-map", "accessories-dictionary", "accessories-text-editor", "help-browser", "multimedia-volume-control", "preferences-desktop-accessibility", "preferences-desktop-font", "preferences-desktop-keyboard", "preferences-desktop-locale", "preferences-desktop-multimedia", "preferences-desktop-screensaver", "preferences-desktop-theme", "preferences-desktop-wallpaper", "system-file-manager", "system-software-install", "system-software-update", "utilities-system-monitor", "utilities-terminal", "applications-accessories", "applications-development", "applications-engineering", "applications-games", "applications-graphics", "applications-internet", "applications-multimedia", "applications-office", "applications-other", "applications-science", "applications-system", "applications-utilities", "preferences-desktop", "preferences-desktop-peripherals", "preferences-desktop-personal", "preferences-other", "preferences-system", "preferences-system-network", "system-help", "audio-card", "audio-input-microphone", "battery", "camera-photo", "camera-video", "camera-web", "computer", "drive-harddisk", "drive-optical", "drive-removable-media", "input-gaming", "input-keyboard", "input-mouse", "input-tablet", "media-flash", "media-floppy", "media-optical", "media-tape", "modem", "multimedia-player", "network-wired", "network-wireless", "pda", "phone", "printer", "scanner", "video-display", "emblem-default", "emblem-documents", "emblem-downloads", "emblem-favorite", "emblem-important", "emblem-mail", "emblem-photos", "emblem-readonly", "emblem-shared", "emblem-symbolic-link", "emblem-synchronized", "emblem-system", "emblem-unreadable", "face-angel", "face-angry", "face-cool", "face-crying", "face-devilish", "face-embarrassed", "face-kiss", "face-laugh", "face-monkey", "face-plain", "face-raspberry", "face-sad", "face-sick", "face-smile", "face-smile-big", "face-smirk", "face-surprise", "face-tired", "face-uncertain", "face-wink", "face-worried", "flag-aa", "application-x-executable", "audio-x-generic", "font-x-generic", "image-x-generic", "package-x-generic", "text-html", "text-x-generic", "text-x-generic-template", "text-x-script", "video-x-generic", "x-office-address-book", "x-office-calendar", "x-office-document", "x-office-presentation", "x-office-spreadsheet", "folder", "folder-remote", "network-server", "network-workgroup", "start-here", "user-bookmarks", "user-desktop", "user-home", "user-trash", "appointment-missed", "appointment-soon", "audio-volume-high", "audio-volume-low", "audio-volume-medium", "audio-volume-muted", "battery-caution", "battery-low", "dialog-error", "dialog-information", "dialog-password", "dialog-question", "dialog-warning", "folder-drag-accept", "folder-open", "folder-visiting", "image-loading", "image-missing", "mail-attachment", "mail-unread", "mail-read", "mail-replied", "mail-signed", "mail-signed-verified", "media-playlist-repeat", "media-playlist-shuffle", "network-error", "network-idle", "network-offline", "network-receive", "network-transmit", "network-transmit-receive", "printer-error", "printer-printing", "security-high", "security-medium", "security-low", "software-update-available", "software-update-urgent", "sync-error", "sync-synchronizing", "task-due", "task-past-due", "user-available", "user-away", "user-idle", "user-offline", "user-trash-full", "weather-clear", "weather-clear-night", "weather-few-clouds", "weather-few-clouds-night", "weather-fog", "weather-overcast", "weather-severe-alert", "weather-showers", "weather-showers-scattered", "weather-snow", "weather-storm"]
        
        self.scrolledwindow = Gtk.ScrolledWindow()
        self.scrolledwindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
        self.add(self.scrolledwindow)
        
        self.grid = Gtk.Grid()
        self.grid.set_column_spacing(5)
        self.grid.set_row_spacing(5)
        self.scrolledwindow.add(self.grid)
        
        self.icon  = []
        self.label = []
        for i in range(0, len(names)):
            self.icon.append(Gtk.Image.new_from_icon_name(names[i], Gtk.IconSize.DIALOG))
            self.grid.attach(self.icon[i], 0, i, 1, 1)
            
            self.label.append(Gtk.Label())
            self.label[i].set_text(names[i])
            self.label[i].set_selectable(True)
            self.label[i].set_xalign(0)
            self.grid.attach(self.label[i], 1, i, 1, 1)
        
def quit_window(self, widget):
    Gtk.main_quit()

win = MyWindow()
win.connect("delete-event", quit_window)
win.show_all()
Gtk.main()

Gtk.Entry

► GTK+ 3 Dokumentation: Gtk.Entry

Das Widget Gtk.Entry erzeugt ein Texteingabefeld. Mit set_text() kann ein Text vorgegeben werden. Mit get_text() kann ein eingegebener Text ausgelesen werden.

Wird der Text des Eingabefeldes geändert, so löst diese Aktion das Signal changed aus, das mit einer entsprechenden Funktion verknüpft werden kann.

Das Betätigen der Eingabe-Taste löst das Signal activate aus.

Code kopieren
        self.entry01 = Gtk.Entry()
        self.entry01.set_text("Hallo Welt!")
        self.entry01.connect('changed', self.on_entry01_changed)
        self.entry01.connect('activate', self.on_entry01_activate)
        self.box02.pack_start(self.entry01, True, True, 6)

        print(self.entry01.get_text())

Gtk.Button

► GTK+ 3 Dokumentation: Gtk.Button

Das Widget Gtk.Button erzeugt eine Schaltfläche. Wird die Schaltfläche angeklickt, so löst diese Aktion das Signal clicked aus, das mit einer entsprechenden Funktion verknüpft werden kann.

Code kopieren
        self.button01 = Gtk.Button(label="Klick mich!")
        self.button01.connect('clicked', self.on_button01_clicked)
        self.box03.pack_start(self.button01, False, False, 0)

Gtk.CheckButton

► GTK+ 3 Dokumentation: Gtk.CheckButton

Das Widget Gtk.CheckButton erzeugt ein Kontrollkästchen. Beim Anklicken dieses Widgets wird das Signal toggled ausgelöst, das mit einer entsprechenden Funktion verknüpft werden kann.

Der Status des Widgets lässt sich mit set_active() festlegen und mit get_active() abfragen.

Code kopieren
        self.checkbutton01 = Gtk.CheckButton()
        self.checkbutton01.set_active(True)
        self.checkbutton01.connect('toggled', self.on_checkbutton01_toggled)
        self.box02.pack_start(self.checkbutton01, False, False, 0)

        print(self.checkbutton01.get_active())

Gtk.RadioButton

► GTK+ 3 Dokumentation: Gtk.RadioButton

Das Widget Gtk.RadioButton erzeugt einen Radiobutton für die Auswahl von genau einer Option aus einer Gruppe von Optionen. Ein Label kann als Argument der Funktion übergeben werden. Die Zusammengehörigkeit verschiedener Optionen zu einer Gruppe wird über new_with_label_from_widget() definiert, wobei als erstes Argument der Name eines der Radiobuttons aus der entsprechenden Gruppe angegeben wird.

Wird eine neue Option ausgewählt, so löst dies das Signal toggled aus, das mit einer entsprechenden Funktion verknüpft werden kann.

Der Status eines Radiobuttons kann mit set_active() eingestellt und mit get_active() abgefragt werden.

Code kopieren
        self.radiobutton01 = Gtk.RadioButton("Option 1")
        self.radiobutton01.connect('toggled', self.on_radiobutton01_toggled)
        self.box02.pack_start(self.radiobutton01, False, False, 0)
        self.radiobutton02 = Gtk.RadioButton.new_with_label_from_widget(self.radiobutton01, "Option 2")
        self.radiobutton02.connect('toggled', self.on_radiobutton01_toggled)
        self.box02.pack_start(self.radiobutton02, False, False, 0)
        self.radiobutton03 = Gtk.RadioButton.new_with_label_from_widget(self.radiobutton01, "Option 3")
        self.radiobutton03.connect('toggled', self.on_radiobutton01_toggled)
        self.radiobutton03.set_active(True)
        self.box02.pack_start(self.radiobutton03, False, False, 0)

    def on_radiobutton01_toggled(self, widget):
        print(self.radiobutton01.get_active(), self.radiobutton02.get_active(),self.radiobutton03.get_active())

Gtk.Switch

► GTK+ 3 Dokumentation: Gtk.Switch

Das Widget Gtk.Switch erzeugt einen Schalter für eine An/Aus- bzw. Ja/Nein-Option.

Wird der Schalter betätigt, so löst dies das Signal notify::active aus, das mit einer entsprechenden Funktion verknüpft werden kann.

Der Status des Schalters kann mit set_active() eingestellt und mit get_active() abgefragt werden.

Code kopieren
        self.switch01 = Gtk.Switch()
        self.switch01.connect('notify::active', self.on_switch01_active)
        self.switch01.set_active(True)
        self.box02.pack_start(self.switch01, False, False, 0)

Gtk.ComboBoxText

► GTK+ 3 Dokumentation: Gtk.ComboBoxText
► Python GTK+ 3 Tutorial: ComboBox

Das Widget Gtk.ComboBoxText erzeugt eine einfache Combobox mit einer Dropdown-Liste zur Auswahl einer Option.

Wird eine Option ausgewählt, so löst dies das Signal notify::active aus, das mit einer entsprechenden Funktion verknüpft werden kann.

Der Index der ausgewählten Option kann mit set_active() eingestellt und mit get_active() abgefragt werden.

Code kopieren
        self.comboboxtext01 = Gtk.ComboBoxText()
        self.comboboxtext01.append_text("Option 0")
        self.comboboxtext01.append_text("Option 1")
        self.comboboxtext01.append_text("Option 2")
        self.comboboxtext01.connect('notify::active', self.on_comboboxtext01_active)
        self.comboboxtext01.set_active(1)
        self.box02.pack_start(self.comboboxtext01, False, False, 0)

Gtk.SpinButton

► GTK+ 3 Dokumentation: Gtk.SpinButton

Das Widget Gtk.SpinButton erzeugt ein Steuerelement zur Auswahl eines numerischen Wertes, der schrittweise eingestellt werden kann. Der untere und obere Wert wird mit set_range() eingestellt, die Schrittweite für linke und mittlere Maustaste mit set_increments().

Der Wert des Widgets kann mit set_value() eingestellt und mit get_value() abgefragt werden.

Wird der Wert geändert, so löst dies das Signal value-changed aus, das mit einer entsprechenden Funktion verknüpft werden kann.

Code kopieren
        self.spinbutton01 = Gtk.SpinButton()
        self.spinbutton01.set_range(0, 100)
        self.spinbutton01.set_increments(1, 10)
        self.spinbutton01.set_value(50)
        self.spinbutton01.connect('value-changed', self.on_spinbutton01_changed)
        self.box02.pack_start(self.spinbutton01, False, False, 0)

Gtk.Scale

► GTK+ 3 Dokumentation: Gtk.Scale

Das Widget Gtk.Scale erzeugt einen Schieberegler zur Auswahl eines numerischen Wertes, der schrittweise eingestellt werden kann. Mit new_with_range() können folgende Parameter als Argumente übergeben werden: Orientierung, unterer Wert, oberer Wert, Schrittweite.

Der Wert des Widgets kann mit set_value() eingestellt und mit get_value() abgefragt werden.

Wird der Wert geändert, so löst dies das Signal value-changed aus, das mit einer entsprechenden Funktion verknüpft werden kann.

Code kopieren
        self.scale01 = Gtk.Scale.new_with_range(Gtk.Orientation.HORIZONTAL, 0, 10, 1)
        self.scale01.set_value(4)
        self.scale01.set_draw_value(True)  # Zeigt Werte neben dem Widget an
        self.scale01.connect('value-changed', self.on_scale01_changed)
        self.box02.pack_start(self.scale01, True, True, 0)

Gtk.FileChooserButton

► GTK+ 3 Dokumentation: Gtk.FileChooserButton Gtk.FileChooserDialog
► Python GTK+ 3 Tutorial: FileChooserDialog

Das Widget Gtk.FileChooserButton erzeugt eine Schaltfläche, über die ein Dialog zur Auswahl einer Datei bzw. eines Ordners geöffnet werden kann.

Der Wert des Widgets kann mit set_filename() eingestellt und mit get_filename() abgefragt werden.

Wird ein neues Objekt gewählt, so löst dies das Signal file-set aus, das mit einer entsprechenden Funktion verknüpft werden kann.

Code kopieren
# Datei auswählen:
        self.filechooserbutton01 = Gtk.FileChooserButton()
        self.filechooserbutton01.set_title("Wählen Sie eine Datei…")  # Titel des Dialogfensters
        self.filechooserbutton01.connect('file-set', self.on_filechooserbutton01_fileset)
        self.box02.pack_start(self.filechooserbutton01, False, False, 0)

# Ordner auswählen:
        self.filechooserdialog02 = Gtk.FileChooserDialog("Wählen Sie einen Ordner…", self, Gtk.FileChooserAction.SELECT_FOLDER, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, "Auswählen", Gtk.ResponseType.OK))
        self.filechooserbutton02 = Gtk.FileChooserButton.new_with_dialog(self.filechooserdialog02)
        self.filechooserbutton02.connect('file-set', self.on_filechooserbutton02_fileset)
        self.filechooserbutton02.set_filename(os.environ['HOME'])
        print(self.filechooserbutton02.get_filename())
        self.box02.pack_start(self.filechooserbutton02, False, False, 0)

Gtk.ColorButton

► GTK+ 3 Dokumentation: Gtk.ColorButton
► GDK 3 Dokumentation: RGBA Colors

Das Widget Gtk.ColorButton erzeugt eine Schaltfläche zur Auswahl einer Farbe.

Wird die Farbe geändert, so löst dies das Signal color-set aus, das mit einer entsprechenden Funktion verknüpft werden kann.

Der Wert des Widgets kann mit set_rgba() eingestellt und mit get_rgba() abgefragt werden. Dazu wird die Komponente Gdk aus dem Modul gi.repository benötigt.

Code kopieren
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk
...
        self.colorbutton01 = Gtk.ColorButton()
        self.colorbutton01.set_rgba(Gdk.RGBA(.2, .4, .6))
        self.colorbutton01.connect('color-set', self.on_colorbutton01_colorset)
        self.box02.pack_start(self.colorbutton01, True, True, 0)
...
    def on_colorbutton01_colorset(self, widget):
        color = self.colorbutton01.get_rgba()
        print(Gdk.RGBA.to_string(color))