在Tkinter中创建GUI骨架

时间:2016-12-28 10:05:17

标签: python python-3.x user-interface tkinter

我想创建一个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]

如果你能告诉我一个我想要完成的事情的例子,我们将不胜感激。

1 个答案:

答案 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()

enter image description here

如果页眉和页脚有一些高度,那么

您可以使用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()