带有 tkinter Treeview 的列表框,如何避免末尾出现空行

带有 tkinter Treeview 的列表框,如何避免末尾出现空行

我有以下代码来使用 Treeview 小部件构建列表框。

import tkinter as tk
import tkinter.ttk as ttk

class AppBase:
    def __init__(self):
        self.mywin = tk.Tk()
        self.mywin.geometry("%dx%d+%d+%d" % (800, 600, 5, 5))
        self.frame1 = tk.Frame(self.mywin)
        self.frame1.pack()

        lb_header = ['name', 'surname']
        lb_list = [
        ('John', 'Smith') ,
        ('Larry', 'Black') ,
        ('Walter', 'White') ,
        ('Fred', 'Becker') 
        ]

        self.tree = ttk.Treeview(columns=lb_header, show="headings")
        self.tree.grid(in_=self.frame1)

        for col in lb_header:
            self.tree.heading(col, text=col.title())
        for item in lb_list:
            self.tree.insert('', 'end', values=item)

    def start(self):
        self.mywin.mainloop()

app=AppBase()
app.start()  

它可以起作用,但如果行数很少,那么在最后就会有一些空行。

这就是结果

如果我增加数据行的数量,空行就会减少,我认为存在最少行数,如果数据行少于最少行数,列表框就会显示白线。

我该如何修复该问题,并将列表框设置为不包含最少行数?

答案1

那些不是空行,而是树视图小部件的高度。

我以前从未使用过 tkinter,但查看文档后我发现height选项

height  Specifies the number of rows which should be visible. Note: the requested width is determined from the sum of the column widths.

因此您可以自己指定树视图的高度,如下所示:

    self.tree = ttk.Treeview(columns=lb_header, show="headings", height=2)

或者匹配项目数量:

    self.tree = ttk.Treeview(columns=lb_header, show="headings", height=len(lb_list))

虽然我不推荐这样做,因为当添加很多项目时它会超出屏幕。

相关内容