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