Gtk4 & Gtk.GridView - seltsame Formatierung

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
AlterSack
User
Beiträge: 5
Registriert: Montag 20. Dezember 2021, 16:36

Moin zusammen,

hab mal 'Gtk.GridView' ausprobieren wollen.
Dazu hab ich mir 'ne Tabelle erstellt und diese mit Werten gefüllt.
Das 'Data'-Objekt (type=float) habe ich an das (von der 'factory' erzeugte 'Gtk.Text'-Objekt) gebunden.
Überrascht hat mich, dass das Progrämmchen ohne zu meckern durchlief, und mir eine fertig formatierte Tabelle zeigte.
Nun meine Frage: Wie kommt diese Formatierung zustande? Und kann man da irgendwo eingreifen?
Hoffe jemand hat 'ne Idee. - Danke

Code: Alles auswählen

import sys
import gi
gi.require_version('Gtk', '4.0')
gi.require_version('Adw', '1')
from gi.repository import Gtk, Gdk, Gio, GLib, Adw, GObject

#-------------------------------------------------------------------------------
class MainWindow(Gtk.ApplicationWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.gridview = Gtk.GridView()
        self.gridview.set_max_columns(12)
        self.gridview.set_min_columns(12)
        self.set_child(self.gridview)

        data = [0,5,9,14,21,28,35,42,49,56,63,70,76,82,91,101,110,119,128,137,146,155,164,173,182,192,202,212,223,234,256]

        class Data(GObject.Object):
            value = GObject.Property(type=float)
            def __init__(self, value):
                super().__init__()
                self.value = value

        self.liststore = Gio.ListStore()

        for v in data:
            self.liststore.append(Data(v))

        multisel = Gtk.MultiSelection()
        multisel.set_model(self.liststore)
        self.gridview.set_model(multisel)

        factory = Gtk.SignalListItemFactory()

        def f_setup(fact, item):
            text = Gtk.Text(halign=Gtk.Align.START)
            text.set_alignment(1.0)
            text.set_max_width_chars (10)
            text.connect('changed', self.on_changed)
            item.set_child(text)

        def f_bind(fact, item):
            data = item.get_item()
            data.bind_property("value", item.get_child(), "text", GObject.BindingFlags.SYNC_CREATE)

        factory.connect("setup", f_setup)
        factory.connect("bind", f_bind)

        self.gridview.set_factory(factory)

    def on_changed(self, text):
        print('changed to: ',text.get_text())
#-------------------------------------------------------------------------------
class App(Adw.Application):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.connect('activate', self.on_activate)

    def on_activate(self, app):
        self.mainwindow = MainWindow(application=app)
        self.mainwindow.present()

#-------------------------------------------------------------------------------
app = App(application_id=None)
app.run(sys.argv)
Antworten