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)