当我在第二个选项卡上打包 ttk.Treeview 时,Python Tkinter Notebook 会调整大小

问题描述 投票:0回答:1

我正在尝试编写一个程序来为帆船比赛计时,并通过从列表中进行选择来简化将船只添加到比赛中的过程。 我使用链接到 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()

希望有人能帮忙。

python tkinter python-3.11
1个回答
0
投票

在不调用

tree2.pack(...)
的情况下,
RaceFrame
的尺寸仍然在1600x880左右,所以笔记本内部的框架都会有最大框架的尺寸,即
RaceFrame

但是,当调用

tree2.pack(...)
时,
RaceFrame
的大小将缩小为
tree2
的大小。因此笔记本的尺寸也会缩小到可以容纳最大框架的尺寸,因为
fill
中没有使用
notebook.pack(...)
选项。

因此,将

fill='both'
添加到
notebook.pack(...)
将使笔记本保持填充窗口的大小。 而笔记本内部的那些框架也会被展开。

© www.soinside.com 2019 - 2024. All rights reserved.