У меня есть программа с 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