我是tkinter的新手,我无法让笔记本填充水平空间。我想将两个笔记本并排放置在窗口顶部。每个笔记本应占据窗口水平空间的一半。
我最初尝试使用pack
,但是这使笔记本电脑扩展不均匀,右笔记本电脑比左笔记本电脑占用更多的空间。我以为grid
会更好,但即使将weight=1
传递给columnconfigure
也无法弄清楚如何使其扩展。
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry("800x100")
status = tk.Frame(root)
left_tabs = ttk.Notebook(status)
tab_a = tk.Frame(left_tabs)
tab_b = tk.Frame(left_tabs)
left_tabs.add(tab_a, text="a")
left_tabs.add(tab_b, text="b")
# left_tabs.pack(side=tk.LEFT, fill=tk.X, expand=True)
left_tabs.grid(row=0, column=0)
right_tabs = ttk.Notebook(status)
tab_c = tk.Frame(right_tabs)
tab_d = tk.Frame(right_tabs)
tab_e = tk.Frame(right_tabs)
right_tabs.add(tab_c, text="c")
right_tabs.add(tab_d, text="d")
right_tabs.add(tab_e, text="e")
# right_tabs.pack(side=tk.LEFT, fill=tk.X, expand=True)
right_tabs.grid(row=0, column=1)
tk.Label(tab_a, text="testing").pack()
tk.Label(tab_c, text="testing").pack()
status.columnconfigure(0, weight=1)
status.columnconfigure(1, weight=1)
status.pack(fill=tk.X)
title = tk.Label(root, text="title", bg="grey")
title.pack(fill=tk.X)
tk.mainloop()
答案 0 :(得分:1)
要使网格布局的所有列都具有相同的宽度,您必须将这些列配置为具有相同的权重和相同的uniform group
。此配置与主窗口小部件相关联,而不与所包含的任何窗口小部件相关联(因为列当然可以包含许多窗口小部件)。
粘性
定义如果结果单元格大于则如何扩展窗口小部件 小部件本身。这可以是常数S,N, E和W,或NW,NE,SW和SE。
例如,W(西)表示小部件应与 左单元格边框。 W + E表示应拉伸小部件 水平填充整个单元格。 W + E + N + S表示小部件 应该向两个方向扩展。默认是将小部件居中 在单元格中。
在进行网格处理时指定sticky
参数:
left_tabs.grid(row=0, column=0, sticky="NESW")
status.columnconfigure(0, weight=1, uniform="group_name")
right_tabs.grid(row=0, column=1, sticky="NESW")
status.columnconfigure(1, weight=1, uniform="group_name")
答案 1 :(得分:1)
grid
允许您请求两个或更多行或列具有相同的宽度或高度。此选项名称为uniform
-如果两个或更多列的uniform
设置相同,则它们的宽度将始终相同。只要uniform
的值相同,就没有关系。
status.columnconfigure(0, weight=1, uniform="x")
status.columnconfigure(1, weight=1, uniform="x")
此外,您需要使用sticky
选项,以便您的笔记本填充已分配给它们的空间。
left_tabs.grid(row=0, column=0, sticky="nsew")
right_tabs.grid(row=0, column=1, sticky="nsew")