我想创建一个Master Frame,我应该能够更改内容,而页眉和页脚应该保持不变。页眉和页脚相对较薄。
我可能应该使用3帧:header_frame,footer_frame和central_frame,正确[1]?我需要在页眉和页脚占用大约10%和10%,而中心框架填满其余部分。
我应该打包还是网格[2]?在这种情况下,我认为pack()更容易,对吧?如果是这样,我该怎么做?或者它可以通过“grid()”[3]完成吗?但是我如何以我想要的方式定位所有这三个框架:10%,80%为中心,10%[4]?
而且,我发现对于我的的内容,中央框架更容易使用grid()。我知道我无法在相同的元素中组合pack()和grid()。但是,我应该只能在中心框架内使用grid(),即使我使用pack()来创建3帧的基本。这是正确的吗?[5]
如果你能告诉我一个我想要完成的事情的例子,我们将不胜感激。
答案 0 :(得分:1)
(1)是的。
(5)是的,在Frame
内你可以使用grid()
和pack()
之外
(4)您可以使用weight
中的grid
来设置行大小。
#!/usr/bin/env python3
import tkinter as tk
root = tk.Tk()
root.geometry('400x300')
header = tk.Frame(root, bg='green')
content = tk.Frame(root, bg='red')
footer = tk.Frame(root, bg='green')
root.columnconfigure(0, weight=1) # 100%
root.rowconfigure(0, weight=1) # 10%
root.rowconfigure(1, weight=8) # 80%
root.rowconfigure(2, weight=1) # 10%
header.grid(row=0, sticky='news')
content.grid(row=1, sticky='news')
footer.grid(row=2, sticky='news')
root.mainloop()
如果页眉和页脚有一些高度,那么
您可以使用side
中的pack
将页脚放在底部
#!/usr/bin/env python3
import tkinter as tk
root = tk.Tk()
root.geometry('400x300')
header = tk.Frame(root, bg='green', height=30)
content = tk.Frame(root, bg='red')
footer = tk.Frame(root, bg='green', height=30)
header.pack(fill='both') #, side='top')
content.pack(fill='both')
footer.pack(fill='both', side='bottom')
root.mainloop()
或expand
内容以使用剩余空间
#!/usr/bin/env python3
import tkinter as tk
root = tk.Tk()
root.geometry('400x300')
header = tk.Frame(root, bg='green', height=30)
content = tk.Frame(root, bg='red')
footer = tk.Frame(root, bg='green', height=30)
header.pack(fill='both')
content.pack(fill='both', expand=True)
footer.pack(fill='both')
root.mainloop()