单个选项卡中的多个帧ttk.Notebook

时间:2012-06-27 13:30:39

标签: python user-interface tkinter ttk

我有以下代码部分(不完整),我想在ttk'Notebook'的单个标签中包含几个框架。

win1 = Tk()    
n = ttk.Notebook(win1)

choice_frame = ttk.Frame(n, style="Black.TLabel")
choice_frame.grid(row=2, column=1, sticky="N,S,E,W", padx=1, pady=1)
choice_frame.grid_columnconfigure(0, weight=3)
choice_frame.grid_rowconfigure(0, weight=1)

frame_text = ttk.Frame(n, style="Black.TLabel")
frame_text.grid(row=0, column=0, sticky = "N")
frame_text.grid_columnconfigure(0, weight=3)
frame_text.grid_rowconfigure(0, weight=1)

frame_table = ttk.Frame(n, style="Black.TLabel")
frame_table.grid(row=2, column=0, padx=1, pady=1, sticky= " N, S, E, W ")
frame_table.grid_columnconfigure(0, weight=3)
frame_table.grid_rowconfigure(0, weight=1)

n.add(frame_table, text="One") # Would like same tab not two separate ones
n.add(choice_frame, text="One")
n.grid(sticky="N")

我还想知道是否有一种方法可以在窗口被拖出并最大化时自动调整每个维度。我之前尝试过:

frame_table.grid_propagate(0)

但这似乎不允许高度和宽度尺寸。我希望我的“桌子”位于窗口的中央,但可以根据窗口大小进行调整。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

grid_propagate不是解决您的任何问题的方法。

每个标签只能包含一个框架,但该单个框架可以包含您想要的任何内容。因此,为选项卡创建一个容器框架,然后将所有其他框架放在容器框架中。这是Frame类存在的主要原因之一 - 构建便于布局的小部件容器。

至于调整大小,问题可能是你没有在主窗口的行和列中添加权重。虽然它也可能与您使用grid将帧放在笔记本中的事实有关;您无法使用grid将项目放入笔记本中。