Tkinter Scrollbox не изменяет размер строки в Treeview - PullRequest
0 голосов
/ 08 апреля 2020

Я искал везде и не могу найти ответ на этот вопрос. Я использую macOS Mojave 10.14.4. Я пытаюсь создать простое поле прокрутки с деревом и полосой прокрутки. По какой-то причине, независимо от того, что я делаю, добавляемые полосы прокрутки не изменят размер до размера дерева. Я приложил образец того, как я пытаюсь достичь этого. Может быть, кто-то здесь может направить меня в правильном направлении?

Скользящее древовидное представление, которое я пытаюсь создать, содержится в классе EditProducts в конструкторе. Другие классы созданы для переключения между страницами. Еще одно замечание: я использую сетку, как и я, чтобы разместить древовидные / полосы прокрутки, так как я скопировал этот код из моей основной программы. Приведенный код должен работать нормально с моей описанной проблемой.

import tkinter as tk
from tkinter import ttk

# GUI class
class GUI(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        # Containter to hold the frames (pages)
        container = tk.Frame(self)
        container.grid(row = 1, column = 0, sticky = "NSEW")

        # List of frames (pages)
        self.frames = {}

        for F in (StartPage, EditProducts):
            frame = F(container, self)

            self.frames[F] = frame

            frame.grid(row = 0, column = 0, sticky = "nsew")

        # Start at the start page
        self.show_frame(StartPage)

    # Shows the desired frame passed in cont
    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

# Home/start page class
class StartPage(tk.Frame):
    # Constructs the page
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        # Edit products button
        self.products = ttk.Button(self, text = "Products", command=lambda: controller.show_frame(EditProducts))
        self.products.grid(row = 2, column = 0)

class EditProducts(tk.Frame):
    # Constructs the page
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        # Box
        # Configure columns of scroll box
        self.Tree = ttk.Treeview(self, selectmode ='browse', height = 10)
        self.Tree['columns'] = ("Category", "Product", "Style", "Size", "Qty", "Link")
        self.Tree.column("#0", width = 0, minwidth = 0, stretch=False)
        self.Tree.column("Category", width = 120, minwidth = 120, stretch=False)
        self.Tree.heading("Category", text = "Category", anchor = 'center')
        self.Tree.column("Product", width = 140, minwidth = 140, stretch=False)
        self.Tree.heading("Product", text = "Product", anchor = 'center')
        self.Tree.column("Style", width = 120, minwidth = 120, stretch=False)
        self.Tree.heading("Style", text = "Style", anchor = 'center')
        self.Tree.column("Size", width = 70, minwidth = 70, stretch=False)
        self.Tree.heading("Size", text = "Size", anchor = 'center')
        self.Tree.column("Qty", width = 30, minwidth = 30, stretch=False)
        self.Tree.heading("Qty", text = "Qty", anchor = 'center')
        self.Tree.column("Link", width = 100, minwidth = 100, stretch=False)
        self.Tree.heading("Link", text = "Link", anchor = 'center')
        # Place the tree view
        self.Tree.grid(row = 6, column = 0, columnspan = 4)
        # Insert test values
        for i in range(20):
            self.Tree.insert("", 1, values = ("Appliance", "Oven", "Silver", "Large", "2", "https://www.website.com"))

        # Scroll bars
        self.Ybar = ttk.Scrollbar(self, orient = 'vertical')
        self.Ybar.grid(row = 6, column = 4, sticky = "W")
        self.Ybar.configure(command = self.Tree.yview)
        self.Xbar = ttk.Scrollbar(self, orient = 'horizontal')
        self.Xbar.grid(row = 7, column = 0, columnspan = 3, sticky = "W")
        self.Xbar.configure(command = self.Tree.xview)
        self.Tree.configure(yscrollcommand = self.Ybar.set, xscrollcommand = self.Xbar.set)

        # Home button
        self.home = ttk.Button(self, text = "Home", command = lambda: controller.show_frame(StartPage))
        self.home.grid(row = 8, column = 0, sticky = "W")

if __name__ == "__main__":
    app = GUI()
    app.geometry("750x420")
    app.mainloop()
...