Seite 1 von 1

Alle geöffneten Knoten eines Treeviews anzeigen

Verfasst: Dienstag 5. März 2019, 15:14
von DMD-OS
hallo,
ich bräuchte da mal ein wenig unterstützung bei meiner sache, nur die geöffneten knoten meines treeviews ausgeben zu lassen.

Code: Alles auswählen

                for main_master in self.tree_master.get_children():
                    self.tree_master.item(main_master, open=True)  # EBENE 0
                    string_1 = self.tree_master.item(main_master)['text']
                    print(string_1)
                    for teenager_master in self.tree_master.get_children(main_master):
                        self.tree_master.item(teenager_master, open=True)  # EBENE 1
                        string_2 = self.tree_master.item(teenager_master)['text']
                        print(string_2)
                        for child_masster in self.tree_master.get_children(teenager_master):
                            self.tree_master.item(child_masster, open=True)  # EBENE 2
                            string_3 = self.tree_master.item(child_masster)['text']
                            print(string_3)
mit dem code snippet öffne ich bis zur ebene 2 alle knoten und gebe alle texte aus.
soweit so gut....
jetzt verändere ich den treeview und möchte mir wieder nur alle geöffneten knoten ausgeben lassen.

Code: Alles auswählen

                for main_master in self.tree_master.get_children():
                    hallo = self.tree_master.item(main_master, option='open')  # EBENE 0
                    print(hallo)
ich bekomme aber immer eine 1 ausgegeben.
was mache ich falsch?

Re: Alle geöffneten Knoten eines Treeviews anzeigen

Verfasst: Dienstag 5. März 2019, 16:00
von /me
Ohne Kontext kann man nicht viel dazu sagen.

Was für Objekte hast du denn da? Konkret: was ist self.tree_master? Es scheint zumindest nichts im Kontext eines GUI-Toolkits zu sein, sonst hättest du die Frage ja im dafür passenden Forumsbereich gestellt.

Re: Alle geöffneten Knoten eines Treeviews anzeigen

Verfasst: Dienstag 5. März 2019, 16:16
von DMD-OS
ja, hast recht. war wohl etwas zu wenig :)
hier der kontext:

Code: Alles auswählen

    ################################
    # TREEVIEW: MASTER-COMMUNICATION
    def master_tree_BUTTONEVENT(self, event):
        cur_item = self.tree_master.focus()
        if cur_item:
            result = self.tree_master.item(cur_item)
            text = result['text']
            ident = result['values'][0]
            activation = result['values'][1]
            typ = result['values'][2]
            reference = result['values'][3]
            sorting = result['values'][4]
            junction = result['values'][5]
            id_attribute = result['values'][6]
            id_unit = result['values'][7]
            data = result['values'][8]
            opened = result['open']

            # TREEVIEW
            current_level = self.db_basetable.MAIN_Row_ID('base', ident)
            top = self.nodes_FORWARD(current_level, list_top=[])

            current_node = (ident, activation, typ, reference, sorting, junction, id_attribute, id_unit, data)
            if top is not None:
                top.append(current_node)

            bottom, bottom_content, bottom_fine = self.nodes_BACKWARD(current_level, list_bottom=[], list_bottom_content=[], list_bottom_fine=[])

            self.tree_dict.update({'text': text})
            self.tree_dict.update({'top': top})
            self.tree_dict.update({'bottom': bottom})
            self.tree_dict.update({'bottom_content': bottom_content})
            self.tree_dict.update({'bottom_fine': bottom_fine})

            marked_node = ''
            marked_node += 'Makierter Knoten: ' + str(text)
            self.treeFrame_master.configure(text=marked_node)

            ######################################
            # BREITENKONTROLLE - ÖFFNEN
            if opened is True:
                for ele_tree in self.tree_dict['bottom_content']:
                    get_datatext = self.db_basetable.DATA_1_Name('data_1', ele_tree[8])[0]
                    string = junction.split('.')
                    if len(string) == 2:
                        if string[1] == '0':
                            string = str(string[0]) + " - " + get_datatext
                        else:
                            string = str(string[0]) + "." + str(string[1]) + " - " + get_datatext
                        text_width = int(get_TREEWIDTH(string, self.font_data_master) * 1.12)
                        if text_width > self.tree_width_master:
                            self.tree_width_master = text_width
                            self.tree_master.column("#0", minwidth=self.tree_width_master, stretch=True)

            # BREITENKONTROLLE - SCHLIESSEN
            master_string_width_event = []
            if opened is False:
                for main_master in self.tree_master.get_children():
                    hallo = self.tree_master.item(main_master, option='open')  # EBENE 0
                    print(hallo)
nachdem eine zeile angeklickt wurde, lese ich die unterpunkte. wenn dort ein text gefunden wird, der breiter ist, als die (vor click) gesetzte textbreite, wird der header dementsprechend verbreitert.
ich möchte nun auch die "verbreiterung" wieder zurück setzen, sobald, der knoten mit dem sehr breiten text wieder zugemacht wird.