1

シンプルなファイルブラウザを作成しようとしています。ファイルのツリー階層を追加しようとしています。階層を正しく出力するサンプル メソッドを作成しましたが、同じ概念をモデル化してオブジェクトを作成するのに苦労していGtk.TreeStoreます。以下は、ファイルを一覧表示するサンプル コードです。

def list_files(startpath):
    for dirname, subdirs, files in os.walk(startpath):
        level = dirname.replace(startpath, '').count(os.sep)
        indent = ' ' * 4 * (level)
        print('{}{}/'.format(indent, os.path.basename(dirname)))
        subindent = ' ' * 4 * (level + 1)
        for f in files:
            print('{}{}'.format(subindent, f))

を作成するコードは次のとおりですGtk.TreeStore

def add_paned(self):
    paned = Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)

    TEST_DIR = '/home/myuser'
    store = MyTreeStore(str)
    store.generate_tree(TEST_DIR)

    treeview = Gtk.TreeView(store)
    renderer = Gtk.CellRendererText()
    column = Gtk.TreeViewColumn("FileName", renderer, text=0)
    treeview.append_column(column)

    paned.add1(treeview)
    self.add(paned)
    return paned

MyTreeStoreクラス:

from gi.repository import Gtk
import os

class MyTreeStore(Gtk.TreeStore):
def __init__(self, *arg):
    super(MyTreeStore, self).__init__(*arg)

def generate_tree(self, path):
    parent = None;
    for dirname, subdirs, files in sorted(os.walk(path)):
        # level = dirname.replace(path, '').count(os.sep)
        # iter = self.get_iter_from_string('{}'.format(level))
        parent = self.append(parent, [os.path.basename(dirname)])
        print(os.path.basename(dirname))
        for file in sorted(files):
           self.append(parent, [file])

ファイル名を追加するときに、適切なイテレータを作成することに固執しています。親がストアに追加された最後のディレクトリであるため、現在、上記のコードはすべてのディレクトリをネストするだけです。これを行う方法について何か考えはありますか?

4

1 に答える 1