Alle geöffneten Knoten eines Treeviews anzeigen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

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?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

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.
Antworten