import tkinter as tk from tkinter import ttk class ButtonTree(ttk.Frame): def __init__(self, parent, items): ttk.Frame.__init__(self, parent) self.parent = parent self.items = items self.tree = MyTree(self, items) self.tree.grid(column=0, row=0, sticky=tk.N) self.buttons = ttk.Frame(self, width=100) self.buttons.grid(column=1, row=0, sticky=tk.N) #print(self.tree.config()) def create_buttons(self): self.update() so_far = header_height = 16 + 2 ttk.Frame(self.buttons).place(in_=self.buttons, x=0, y=0, width=100, height=header_height) for item_name, item in zip(self.tree.get_children(), self.items): print(item_name, item,self.tree.bbox(item_name)) button = ttk.Button(self.buttons, text = "Do Something...") h = self.tree.bbox(item_name)[-1] button.place(in_=self.buttons, x=0, y=so_far, width=100, height=h) so_far += h self.buttons["height"] = len(self.items)*20 + header_height class MyTree(ttk.Treeview): def __init__(self, parent, items): ttk.Treeview.__init__(self, parent, columns = ("A"), padding=1) self.heading("A", text = "Some A") self.parent = parent self.items = items for item in self.items: self.insert(parent = "", index = "end", text = item, values = "hello") if __name__ == "__main__": root = tk.Tk() buttonTree = ButtonTree(root, list(range(10))) buttonTree.pack() #buttonTree.create_buttons() root.mainloop()