tkinter ttk.позиционирование дерева в сетке

#python-3.x #tkinter #ttk

Вопрос:

Я пытаюсь позиционировать ттк.Древовидное изображение внутри сетки его родителя. Неважно, что я делаю, вид дерева просто не хочет быть в сетке, но отображается под ней. Есть ли изъян в моем коде? Или просто невозможно расположить древовидное изображение внутри сетки? В демонстрационных целях я также добавил в код список. Изменяя значения строк/столбцов, я могу расположить список в любом месте сетки, где захочу. Однако изменение значений для просмотра дерева, похоже, не имеет никакого эффекта.

 import tkinter as tk
from tkinter.font import Font
from tkinter import ttk


class app(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.parent = parent
        self.pack()

        rows = 0
        while rows < 12:
            self.rowconfigure(rows, weight=1, minsize=50)
            self.columnconfigure(rows, weight=1, minsize=80)
            rows  = 1

        listview = listbox(self)
        tree_view = treeview(self)
        listview.grid(row=5, column=2, columnspan=10)
        tree_view.grid(row=0, column=2, columnspan=10)


class listbox(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.create_listbox()
        self.listbox.pack()

    def create_listbox(self):
        data = tk.StringVar(value=("dfsaas", ";fdsa", "fdsaerwqo"))
        self.listbox = tk.Listbox(self, listvariable=data, height=4)


class treeview(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.create_treeview()
        self.load_data()
        self.tree.pack()

    def create_treeview(self):
        self.data_columns = ("col1", "col2", "col3")
        self.tree = ttk.Treeview(columns=self.data_columns, show="headings")

    def load_data(self):
        data = [
            ["asfd", "fdsasf", "werqra"],
            ["as54fd", "fdsa54sf", "wer213qra"],
            ["asjgkh", "fdasf", "werqfsdara"],
        ]
        for col in self.data_columns:
            self.tree.heading(col, text=col.title())
            self.tree.column(col, width=Font().measure(col.title()))
        for item in data:
            self.tree.insert("", "end", values=item)
            for index, val in enumerate(item):
                iwidth = Font().measure(val)
                if self.tree.column(self.data_columns[index], "width") < iwidth:
                    self.tree.column(self.data_columns[index], width=iwidth)


root = tk.Tk()
app(root)
root.mainloop()
 

Комментарии:

1. Вы не прошли self в ttk.Treeview(...) , поэтому он будет создан в корневом окне, а не внутри рамки treeview .