こんなものを今更見つけた。
g_file_enumerate_children_async をラップしているらしい。
つまりコレを使えばファイルマネージャみたいな UI が簡単に作れるようだ。
しかしコレだけじゃどうやって使うのかちっともわからんぞ。
誰かサンプルコードでも書いていないか、探す。
GitHub – ToshioCP/Gtk4-tutorial: A gtk4 tutorial for beginners
おぉありがとう、なんと日本人ではないですか。
Ruby 屋さんのようですがごめん、筆者は PyGObject でやる。
ListItem.get_item で Gio.FileInfo が得られるようで。
#!/usr/bin/env python3 import gi, sys gi.require_version('Gtk', '4.0') gi.require_version('Adw', '1') from gi.repository import Gtk, Gio, Adw class Win(Gtk.ApplicationWindow): def __init__(self, a): # Set Adwaita Style manager = Adw.StyleManager.get_default() manager.set_color_scheme(Adw.ColorScheme.DEFAULT) # init Gtk.ApplicationWindow.__init__(self, application=a) # f = Gio.File.new_for_path('.') ls = Gtk.DirectoryList(file=f, attributes='standard::name,standard::content-type,standard::size') # sel_model = Gtk.SingleSelection(model=ls) # factory1 = Gtk.SignalListItemFactory() factory1.connect('setup', self.on_listitem_setup) factory1.connect('bind', self.on_listitem_bind1) # factory2 = Gtk.SignalListItemFactory() factory2.connect('setup', self.on_listitem_setup) factory2.connect('bind', self.on_listitem_bind2) # factory3 = Gtk.SignalListItemFactory() factory3.connect('setup', self.on_listitem_setup) factory3.connect('bind', self.on_listitem_bind3) # columnview = Gtk.ColumnView(model=sel_model) columnview.connect('activate', self.on_columnview_activate) # column1 = Gtk.ColumnViewColumn(title='Filename', factory=factory1) columnview.append_column(column1) column2 = Gtk.ColumnViewColumn(title='ContentType', factory=factory2) columnview.append_column(column2) column3 = Gtk.ColumnViewColumn(title='Size', factory=factory3) columnview.append_column(column3) # self.set_child(columnview) def on_listitem_setup(self, factory, item): item.set_child(Gtk.Label(xalign=0)) def on_listitem_bind1(self, factory, item): info = item.get_item() label = item.get_child() label.props.label = info.get_name() def on_listitem_bind2(self, factory, item): info = item.get_item() label = item.get_child() label.props.label = info.get_content_type() def on_listitem_bind3(self, factory, item): info = item.get_item() label = item.get_child() label.props.label = f'{info.get_size()} byte' def on_columnview_activate(self, listview, pos): print(1) app = Gtk.Application() app.connect('activate', lambda a: Win(a).present()) app.run()
イケるじゃん。
と思ったけどコレってソートはどうするんだ?
あと隠しファイル等を弾くには bind ハンドラ全部に同じ処理がいるよね。
たしかに簡単だけど実用にはチト使い辛い感じ。