class agacGorunumu(App): def build(self): duzen=BoxLayout(orientation='vertical') self.agac_koku = TreeView(hide_root=True, size_hint_y=0.8) kuruyemisler=[('Sert Kabuklular',('Ceviz', 'Fındık', 'Badem')), ('Meyve Kuruları',('Dut', 'Vişne', 'Kayısı', 'İncir'))] for ky in kuruyemisler: eb=self.agac_koku.add_node(TreeViewLabel(text=ky[0])) for k in ky[1]: self.agac_koku.add_node(TreeViewLabel(text=k),eb) duzen.add_widget(self.agac_koku) dgm=Button(text='Elemanları Yaz', size_hint_y=0.2) dgm.bind(on_press=self.elemanlari_yaz) duzen.add_widget(dgm) return duzen def elemanlari_yaz(self, *args): for eb in self.agac_koku.iterate_all_nodes(): print eb.level, eb.text if self.agac_koku.selected_node: print "Seçili Eleman", self.agac_koku.selected_node.text print self.agac_koku.get_node_at_pos((1,1))
class TreeWidget(BoxLayout): def __init__(self, **kwargs): super(TreeWidget, self).__init__(**kwargs) self.selected = None self.items = [] # self.on_touch_down=self.touch def populate_tree_view(self, tree_view, parent, node): if parent is None: tree_node = tree_view.add_node( TreeViewLabel( text=node['node_id'], on_touch_up=self.touch1, is_open=True, font_size=25, )) # ,bcolor=random.choice(self.colors) tree_node.item = node["item"] self.items.append(tree_node) else: tl = TreeViewLabel( text=node['node_id'], is_open=False, font_size=25, ) # ,bcolor=random.choice(self.colors) tl.item = node["item"] tree_node = tree_view.add_node(tl, parent) for child_node in node['children']: self.populate_tree_view(tree_view, tree_node, child_node) def define(self, tree1, callback, colors): self.callback = callback self.colors = colors self.tv = TreeView(root_options=dict(text='Playlists'), hide_root=True, on_touch_down=self.touch2, indent_level=10) self.tv.size_hint = 1, None self.tv.bind(minimum_height=self.tv.setter('height')) self.populate_tree_view(self.tv, None, tree1) root = ScrollView(pos=(0, 0)) root.add_widget(self.tv) self.add_widget(root) def touch1(self, instance, touch): return False def touch2(self, instance, touch): """ Handle a touch event on a child TreeViewLabel :param args: :param kwargs: :return: """ node = self.tv.get_node_at_pos(touch.pos) if not node: return try: self.callback(node.item["uri"], node.text) return True except: pass self.tv.toggle_node(node) node.dispatch('on_touch_down', touch) return True