我正在尝试编写一个程序来为帆船比赛计时,并通过从列表中进行选择来简化将船只添加到比赛中的过程。 我使用链接到 tk.StringVar() 的 Treeview 来过滤船只,方法是输入人名或船只名称的一部分来过滤要选择的船只列表。 这非常有效。 我正在 Debian 12 Linux Plasma 中编写这个程序
我想在第二个选项卡上放置一个树视图以显示选择作为条目的船只列表,但是当我打包此树视图时,笔记本不会展开以填充窗口。 取消注释以下行会产生此行为。
#tree2.pack(fill='both', expand=True)
以下是代码
import tkinter as tk
from tkinter import ttk
import csv
# root window
root = tk.Tk()
root.geometry(str('1600x900'))
# create a notebook
notebook = ttk.Notebook(root)
notebook.pack(expand=True)
# create frames for tabs
EntriesFrame = ttk.Frame(notebook, width=1600, height=880) # 20 seems to be the right amount
RaceFrame = ttk.Frame(notebook, width=1600, height=880)
# add frames to notebook as tabs
notebook.add(EntriesFrame, text='Entries')
notebook.add(RaceFrame, text='Race')
# Set up a treeview in first tab (EntriesFrame)
ColNames = ['SailNo', 'Boat', 'HelmName', 'CrewName', 'Class', 'Fleet', 'Yardstick']
tree = ttk.Treeview(EntriesFrame, columns=ColNames, show='headings')
for ColName in ColNames:
tree.heading(ColName, text=ColName)
tree.pack(fill='both', expand=True)
# a Treeview for the entries on the next tab.
tree2 = ttk.Treeview(RaceFrame, columns=ColNames, show='headings')
for ColName in ColNames:
tree2.heading(ColName, text=ColName)
#tree2.pack(fill='both', expand=True)
root.mainloop()
希望有人能帮忙。
在不调用
tree2.pack(...)
的情况下,RaceFrame
的尺寸仍然在1600x880左右,所以笔记本内部的框架都会有最大框架的尺寸,即RaceFrame
。
但是,当调用
tree2.pack(...)
时,RaceFrame
的大小将缩小为tree2
的大小。因此笔记本的尺寸也会缩小到可以容纳最大框架的尺寸,因为fill
中没有使用notebook.pack(...)
选项。
因此,将
fill='both'
添加到 notebook.pack(...)
将使笔记本保持填充窗口的大小。 而笔记本内部的那些框架也会被展开。