Kivy Tree Посмотреть, как сохранить выбор пользователя? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть программа с Tree View, я хочу использовать выбор клиента, когда он нажимает на одну из меток. Программа основана на клиент-сервере, но остальная часть кода не имеет значения. объект file_system имеет тип CloudSystem, класс CloudSystem создает словарь указанного пути.

.py file

class CloudSystem:
    def __init__(self, cloud_path):
        self.root = cloud_path
        self.cloud_tree = {}
        self.current_dict = self.cloud_tree
        self.current_dict[os.path.basename(self.root)] = {}
        self.cloud_tree = self.create_cloud( self.root)

    def create_cloud(self, root_dir):
        dir = {}
        root_dir = root_dir.rstrip(os.sep)
        start = root_dir.rfind(os.sep) + 1
        for path, dirs, files in os.walk(root_dir):
            folders = path[start:].split(os.sep)
            subdir = dict.fromkeys(files)
            parent = reduce(dict.get, folders[:-1], dir)
            parent[folders[-1]] = subdir
        return dir


    def to_string(self):
        print(self.cloud_tree)

    def get_tree(self):
        return self.cloud_tree
def populate_tree_view(tree_view, parent, node):
if node is not None:
    if parent is None:
        for key in node:
            tree_node = tree_view.add_node(TreeViewLabel(text=key,
                                                         is_open=False))
            if node[key] is not None:
                populate_tree_view(tree_view, tree_node, node[key])
    else:
        for key in node:
            tree_node = tree_view.add_node(TreeViewLabel(text=key,
                                                         is_open=False), parent)
            if node[key] is not None:
                populate_tree_view(tree_view, tree_node, node[key])


class CloudView(Screen, FloatLayout):
    def __init__(self, **kwargs):

        super(CloudView, self).__init__(**kwargs)

        self.tv = TreeView(root_options=dict(text='My Cloud'),
                      hide_root=False,
                      indent_level=4, )

        populate_tree_view(self.tv, None, self.show_cloud())
        self.add_widget(self.tv)

def show_cloud(self):
    s.send('CLOUD'.encode('utf-8'))
    file_system = pickle.loads(s.recv(4096))
    return file_system.get_tree()

def on_selection(self):
    pass

.kv file

<CloudView>:
    name: "cloud"
    id: cloud_view
...