Layout-Problem bei Treeview

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
in meinem code kann ich zwischen verschiedenen treeview-layouts wechseln.
ich kann informationen in einer tabellarischen ansicht und einer knotenansicht immer im wechsel hin- und herschalten.
nachdem ich den main_tree lade:

Code: Alles auswählen

        
        self.slave_tree = ttk.Treeview(self.canvas_slave)
        self.slave_tree.pack(side=tk.TOP, fill=tk.BOTH)
        self.slave_tree.bind("<Configure>", self.slave_canvas_CONFIGURE)
konfiguriere ich einmal die tabellarische Ansicht:

Code: Alles auswählen

        style_table = ttk.Style()
        style_table.configure("tablestyle.Treeview", highlightthickness=0, bd=0, font=('Times', 10))
        style_table.configure("tablestyle.Treeview.Heading", font=('Arial', 10, 'bold', 'underline'))
        style_table.layout("tablestyle.Treeview", [('tablestyle.Treeview.treearea', {'sticky': 'nswe'})])
        self.slave_tree.configure(style="tablestyle.Treeview", show="headings")
        self.slave_tree.heading('#0', text='Bauteiltypen nach DIN 276+x', anchor=tk.W)
und die knotenansicht:

Code: Alles auswählen

        style_node = ttk.Style()
        style_node.configure("nodestyle.Treeview.Heading", font=('Arial', 9, 'bold', 'underline'))
        style_node.configure("nodestyle.Treeview", highlightthickness=0, bd=0, font=('Times', 10))
        style_node.layout("nodestyle.Treeview", [('slavestyle.Treeview.treearea', {'sticky': 'nswe'})])
        self.slave_tree.configure(style="nodestyle.Treeview", show='tree')
        self.slave_tree.heading("#0", text='Bauteiltypen nach DIN 276+x', anchor=tk.W)
Bei der Knotenansicht habe ich aber das kleine Problem, daß ich zwar show='tree' natürlich behalten will,
damit meine Knotenstruktur erhalten bleibt, ich aber trotzdem oben gern den header "Bauteiltypen..." behalten möchte.
quasi show='tree' aber trotzdem mit header bzw. column. :shock:
ich habs so versucht:

Code: Alles auswählen

        style_node = ttk.Style()
        style_node.configure("nodestyle.Treeview.Heading", font=('Arial', 9, 'bold', 'underline'))
        style_node.configure("nodestyle.Treeview", highlightthickness=0, bd=0, font=('Times', 10))
        style_node.layout("nodestyle.Treeview", [('slavestyle.Treeview.treearea', {'sticky': 'nswe'})])
        self.slave_tree.configure(style="nodestyle.Treeview", column="A", show='tree')
        self.slave_tree.heading("A", text='Bauteiltypen nach DIN 276+x', anchor=tk.W)
was natürlich nicht funktioniert.
gibt es da eine lösung???
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

vielleicht noch mal deutlicher :lol:
kann man das layout eines treeviews einmal als knotenstruktur und
zum anderen als tabellenstruktur anpassen?
mein code:

main_treeview (der an die beiden verschiedenen strukturen angepasst werden soll):

Code: Alles auswählen

        # SLAVETREE-Frame
        frame_slavetree = tk.Frame(self.frame_slavetree, bg="green")
        frame_slavetree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=5, pady=5)

        border_frame = tk.Frame(frame_slavetree, bg="green")
        border_frame.pack(fill=tk.BOTH, expand=True)

        frame_canvas_slavetree = tk.Frame(border_frame)
        frame_canvas_slavetree.pack(fill=tk.BOTH, expand=True, )

        self.canvas_slave = tk.Canvas(frame_canvas_slavetree, highlightthickness=0, bg="white", width=1, height=1)
        self.canvas_slave.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        self.canvas_slave.bind("<Configure>", self.slave_canvas_CONFIGURE)

        canvas_interior_slave = tk.Frame(self.canvas_slave)

        self.slave_tree = ttk.Treeview(canvas_interior_slave)
        self.slave_tree.pack(side=tk.TOP, fill=tk.BOTH)
        self.slave_tree.bind("<Configure>", self.slave_canvas_CONFIGURE)

        self.canvas_slave.create_window(0, 0, anchor='nw', window=canvas_interior_slave)

        # yscrollbar_slave = tk.Scrollbar(frame_canvas_slavetree, orient="vertical", command=self.canvas_slave.yview)
        # yscrollbar_slave.pack(side=tk.LEFT, fill=tk.Y)
        xscrollbar_slave = tk.Scrollbar(border_frame, orient="horizontal", command=self.canvas_slave.xview)
        xscrollbar_slave.pack(fill=tk.X)

        self.canvas_slave.configure(xscrollcommand=xscrollbar_slave.set)
        
        def slave_canvas_CONFIGURE(self, event=None):                                             #<--- hier bin ich am basten dran...
        	self.slave_tree.configure(height=self.canvas_slave.winfo_height())
        	slave_tree_width = self.slave_tree.winfo_width()
        	slave_tree_height = self.slave_tree.winfo_height()
        	self.canvas_slave.configure(scrollregion=(0, 0, slave_tree_width, slave_tree_height))
        
        
Für die Tabellenstruktur:

Code: Alles auswählen

        style_slave = ttk.Style()
        style_slave.configure("slavestyle.Treeview", highlightthickness=0, bd=0, font=('Times', 10))
        style_slave.configure("slavestyle.Treeview.Heading", font=('Arial', 10, 'bold', 'underline'))
        style_slave.layout("slavestyle.Treeview", [('slavestyle.Treeview.treearea', {'sticky': 'nswe'})])
        self.slave_tree.configure(style="slavestyle.Treeview", show='headings')
        [...]
        self.slave_tree.configure(columns=header_fine)
        for col in header_fine:
                self.slave_tree.heading(col, text=col)
        for row in row_list:
                self.slave_tree.insert('', 'end', values=row) 
Für die Knotenstruktur:

Code: Alles auswählen

        style_slave = ttk.Style()
        style_slave.configure("slavestyle.Treeview.Heading", font=('Arial', 9, 'bold', 'underline'))
        style_slave.configure("slavestyle.Treeview", highlightthickness=0, bd=0, font=('Times', 10))
        style_slave.layout("slavestyle.Treeview", [('slavestyle.Treeview.treearea', {'sticky': 'nswe'})])
        self.slave_tree.configure(style="slavestyle.Treeview", show='tree')
        [...]
        self.slave_tree.insert('', f_sorting, f_name, text=string)      
Die Tabellenansicht sieht aus, wie sie soll.
Wenn ich aber zur Knotenansicht wechsel, wird dort alles korrekt angezeigt, allerdings in einem sehr engen column.
Daher versuche ich das Frame "canvas_interior_slave" (im main_treeview, s. oben) für die Knotenstruktur zu verbreitern.
Was mir nicht gelingt.
Würde mich über etwas Hilfestellung freun :|
Antworten