我有以下代码来使用 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))
虽然我不推荐这样做,因为当添加很多项目时它会超出屏幕。