首页 > 解决方案 > 出现 Tkinter Treeview 可用空间

问题描述

按下简单调用fill_table()函数的按钮后,表格中会出现一个空闲空间。为什么会发生这种情况以及如何避免这种情况?我的代码:

import tkinter as tk
import tkinter.ttk as ttk


def fill_table():
    required_columns = ['col1', 'col2', 'col3']
    table_treeview["columns"] = required_columns
    table_treeview["show"] = "headings"
    for col in required_columns:
        table_treeview.column(col, width=90)
        table_treeview.heading(col, text=col)


root = tk.Tk()

table_treeview = ttk.Treeview(root)
table_treeview.pack()

button = tk.Button(root, text='Restart', command=fill_table)
button.pack()

fill_table()


root.mainloop()

图片:

标签: pythontkintertreeviewtkttk

解决方案


似乎如果您在启动 mainloop 之后运行它,那么它不会等到函数结束来重绘小部件,但是当您创建新列时,它会使用默认大小和刷新窗口创建它,以便调整窗口大小。之后将其width=90改回较小的尺寸,但它不会改变窗口的大小 - 所以你在窗口中有空白空间。

但是如果我在之后使用table_treeview["show"] = "headings"width=90不会调整列的大小并且窗口不会改变大小

(在 Linux Mint 上测试)


我对列使用了不同名称的第二个函数,以查看它是否可以更改列。

import tkinter as tk
import tkinter.ttk as ttk


def fill_table():
    required_columns = ['col1', 'col2', 'col3']
    table_treeview["columns"] = required_columns
    for col in required_columns:
        table_treeview.column(col, width=90)
        table_treeview.heading(col, text=col)
    table_treeview["show"] = "headings"  # use after setting column's size

def fill_table_2():
    required_columns = ['colA', 'colB', 'colC']
    table_treeview["columns"] = required_columns
    for col in required_columns:
        table_treeview.column(col, width=90)
        table_treeview.heading(col, text=col)
    table_treeview["show"] = "headings"  # use after setting column's size

root = tk.Tk()

table_treeview = ttk.Treeview(root)
table_treeview.pack()

button = tk.Button(root, text='Restart', command=fill_table_2)
button.pack()

fill_table()

root.mainloop()

推荐阅读