【问题标题】:Can't resize treeview with grid on tkinter无法在 tkinter 上使用网格调整树视图的大小
【发布时间】:2018-01-02 08:10:40
【问题描述】:

我无法使用网格布局调整 tkinter 上的树视图小部件的大小。我尝试将columnconfigurerowconfigureweight 一起使用,但它不起作用。当我运行它时,当我拉伸它所在的窗口时,树视图不会填充空白空间。

def __init__(self, master):
    self.master = master
    tk.Frame.__init__(self, self.master)
    self.create_widgets()

def create_widgets(self):
    # button to request data
    self.request_button = tk.Button(root, text="Send", command=self.req_client)
    self.request_button.grid(row=0, column=0, rowspan=2, columnspan=3)

    # timer label
    self.timer_label = tk.Label(root, text="Timer Settings")
    self.timer_label.grid(row=0, column=3, columnspan=2, pady=3, sticky=tk.NSEW)

    # create tk variable
    self.timervar = tk.StringVar(root)

    # dropdown dictionary
    self.timerDict = {"-", "5 minutes", "10 minutes", "15 minutes"}
    self.timervar.set("-")  # <-- set the default value

    # timer dropdown menu
    self.timer_option = tk.OptionMenu(root, self.timervar, *self.timerDict, command=self.req_timer)
    self.timer_option.grid(row=1, column=3, columnspan=2, padx=3, pady=3, sticky=tk.NSEW)

    # scroll bar for the terminal outputs
    self.terminal_scrollbar = tk.Scrollbar(root)
    self.terminal_scrollbar.grid(row=2, column=5, sticky=tk.NS)

    # terminal output
    self.terminal_tree = ttk.Treeview(root)
    self.terminal_tree.grid(row=2, column=0, columnspan=5, sticky=tk.NSEW)
    self.terminal_tree.configure(yscrollcommand=self.terminal_scrollbar.set)
    self.terminal_tree.columnconfigure(0, weight=1)
    self.terminal_tree.rowconfigure(0, weight=1)
    self.terminal_tree["columns"] = ("1")
    self.terminal_tree['show'] = 'headings'
    self.terminal_tree.column("1", width=100, anchor='c')
    self.terminal_tree.heading("1", text="Example")

【问题讨论】:

  • 如果您使用Frame 创建类,那么您应该使用此框架(self)作为小部件的父级(而不是root
  • treeviewroot 的网格中,因此您应该使用root.columnconfigure() 更改网格weight
  • @furas 我认为你的最后一条评论就是答案。
  • @Nae 我太累了,无法创建示例来检查它。但在你发表评论后,我做了例子:)

标签: python python-3.x tkinter resize treeview


【解决方案1】:

首先:如果你使用Frame创建类,那么你应该使用这个框架(self)作为小部件的父级(而不是使用root

之后...

第二:您必须调整Frame (self) 的大小,以便使用全窗口

self.pack(fill='both', expand=True)

因为TreeviewFrame 内部,所以您必须将columnconfigureFrame 一起使用

self.columnconfigure(0, weight=1) # column with treeview
self.rowconfigure(2, weight=1) # row with treeview  

工作示例。我评论了command= 来运行它。

(顺便说一句:我在Frame 中使用了bg="red" 来查看Frame 是否正在调整大小)

import tkinter as tk
from tkinter import ttk

class Main(tk.Frame):

    def __init__(self, master):
        self.master = master
        tk.Frame.__init__(self, self.master) # , bg="red")

        self.pack(fill='both', expand=True)

        self.create_widgets()

    def create_widgets(self):
        # button to request data
        self.request_button = tk.Button(self, text="Send") #, command=self.req_client)
        self.request_button.grid(row=0, column=0, rowspan=2, columnspan=3)

        # timer label
        self.timer_label = tk.Label(self, text="Timer Settings")
        self.timer_label.grid(row=0, column=3, columnspan=2, pady=3, sticky=tk.NSEW)

        # create tk variable
        self.timervar = tk.StringVar(self)

        # dropdown dictionary
        self.timerDict = {"-", "5 minutes", "10 minutes", "15 minutes"}
        self.timervar.set("-")  # <-- set the default value

        # timer dropdown menu
        self.timer_option = tk.OptionMenu(self, self.timervar, *self.timerDict) #, command=self.req_timer)
        self.timer_option.grid(row=1, column=3, columnspan=2, padx=3, pady=3, sticky=tk.NSEW)

        # scroll bar for the terminal outputs
        self.terminal_scrollbar = tk.Scrollbar(self)
        self.terminal_scrollbar.grid(row=2, column=5, sticky=tk.NS)

        # terminal output
        self.terminal_tree = ttk.Treeview(self)
        self.terminal_tree.grid(row=2, column=0, columnspan=5, sticky=tk.NSEW)
        self.terminal_tree.configure(yscrollcommand=self.terminal_scrollbar.set)
        self.terminal_tree["columns"] = ("1")
        self.terminal_tree['show'] = 'headings'
        self.terminal_tree.column("1", width=100, anchor='c')
        self.terminal_tree.heading("1", text="Example")

        self.columnconfigure(0, weight=1) # column with treeview
        self.rowconfigure(2, weight=1) # row with treeview        

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

您可能必须在第一行内使用框架来更好地组织按钮和选项菜单。


编辑:在更改某些grid() 中的选项并更改rowconfigure() 之后

import tkinter as tk
from tkinter import ttk

class Main(tk.Frame):

    def __init__(self, master):
        self.master = master
        tk.Frame.__init__(self, self.master) # , bg="red")

        self.pack(fill='both', expand=True)

        self.create_widgets()

    def create_widgets(self):
        # button to request data
        self.request_button = tk.Button(self, text="Send") #, command=self.req_client)
        self.request_button.grid(row=0, column=0, rowspan=2)

        # timer label
        self.timer_label = tk.Label(self, text="Timer Settings")
        self.timer_label.grid(row=0, column=1, pady=3, sticky=tk.NSEW)

        # create tk variable
        self.timervar = tk.StringVar(self)

        # dropdown dictionary
        self.timerDict = {"-", "5 minutes", "10 minutes", "15 minutes"}
        self.timervar.set("-")  # <-- set the default value

        # timer dropdown menu
        self.timer_option = tk.OptionMenu(self, self.timervar, *self.timerDict) #, command=self.req_timer)
        self.timer_option.grid(row=1, column=1, padx=3, pady=3, sticky=tk.NSEW)

        # scroll bar for the terminal outputs
        self.terminal_scrollbar = tk.Scrollbar(self)
        self.terminal_scrollbar.grid(row=2, column=5, sticky=tk.NS)

        # terminal output
        self.terminal_tree = ttk.Treeview(self)
        self.terminal_tree.grid(row=2, column=0, columnspan=3, sticky=tk.NSEW)
        self.terminal_tree.configure(yscrollcommand=self.terminal_scrollbar.set)
        self.terminal_tree["columns"] = ("1")
        self.terminal_tree['show'] = 'headings'
        self.terminal_tree.column("1", width=100, anchor='c')
        self.terminal_tree.heading("1", text="Example")

        self.columnconfigure(2, weight=1) # column with treeview
        self.rowconfigure(2, weight=1) # row with treeview        

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 2020-07-12
    • 1970-01-01
    • 2018-12-19
    相关资源
    最近更新 更多