Seite 1 von 1

Layout-Problem bei Treeview

Verfasst: Donnerstag 14. Februar 2019, 10:28
von DMD-OS
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???

Re: Layout-Problem bei Treeview

Verfasst: Donnerstag 14. Februar 2019, 17:00
von DMD-OS
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 :|