在文本窗口上方并排放置两个按钮

我们想要在文本窗口上方并排放置两个按钮,但使用side=LEFT只会将两个按钮放在文本窗口旁边。

2、解决方案
解决方案1:使用两个容器(通常是框架)。一个用来容纳水平的部件,一个用来容纳垂直的部件。在本例中,根窗口可以用作垂直堆叠部件的容器。将两个按钮放在水平框架中(使用pack(side=LEFT)),然后将该框架放在文本窗口上面(使用pack(side=TOP))。

解决方案2:使用网格几何管理器,它将用户界面布局成网格。将按钮放在单元格0,1和0,2中,并将文本窗口放在1,1中跨越两列。

一般来说,使用网格需要更多的前期规划。您必须弄清楚哪些部件需要跨越列或行,哪些列或行应该随着部件的大小改变而增长或缩小等。对于这样简单的布局来说,pack解决方案是最简单的(对于某些“简单”的定义而言)。

使用多帧技术实现此方法如下。注意我们如何将窗口小部件作为根而不是内部框架的子项创建。这使得将来修改布局变得更加容易,因为您只需创建或删除各种框架,而无需修改窗口小部件层次结构。

# 创建布局的主要部分,并排列它们
top = Frame(root)
bottom = Frame(root)
top.pack(side=TOP)
bottom.pack(side=BOTTOM, fill=BOTH, expand=True)

# 为 GUI 顶部创建窗口小部件,并排列它们
b = Button(root, text="Enter", width=10, height=2, command=button1)
c = Button(root, text="Clear", width=10, height=2, command=clear)
b.pack(in_=top, side=LEFT)
c.pack(in_=top, side=LEFT)

# 为底部 GUI 创建窗口小部件,并排列它们
text = Text(root, width=35, height=15)
scrollbar = Scrollbar(root)
scrollbar.config(command=text.yview)
text.config(yscrollcommand=scrollbar.set)
scrollbar.pack(in_=bottom, side=RIGHT, fill=Y)
text.pack(in_=bottom, side=LEFT, fill=BOTH, expand=True)

使用网格的简单实现如下。它具有不同的调整大小行为,可能并非您想要的。它实际上取决于您想要的调整大小行为。通常,我会使用框架管理控件行,然后使用网格将其与其他窗口小部件一起布局。在本示例中,我将仅对所有内容使用网格。

注意,除了管理窗口小部件所在的行(列)之外,您还必须决定行和列的加权因子。至少你需要选择一行和一列来“拾取松弛”,通常意味着无论你主要的窗口小部件是什么列(阅读:通常是文本、画布或其他框架)。

b = Button(root, text="Enter", width=10, height=2, command=button1)
c = Button(root, text="Clear", width=10, height=2, command=clear)
b.grid(row=0,column=0, sticky=W)
c.grid(row=0,column=1, sticky=W)

textframe = Frame(root)
textframe.grid(in_=root, row=1, column=0, columnspan=3, sticky=NSEW)
root.columnconfigure(0, weight=1)
root.rowconfigure(1, weight=1)

text = Text(root, width=35, height=15)
scrollbar = Scrollbar(root)
scrollbar.config(command=text.yview)
text.config(yscrollcommand=scrollbar.set)
scrollbar.pack(in_=textframe, side=RIGHT, fill=Y)
text.pack(in_=textframe, side=LEFT, fill=BOTH, expand=True)

在这个具体的例子中,我会选择第一个方法,即使用pack。对于更复杂的设计,我几乎总是会将两者结合使用。对于自然堆叠在水平或垂直方向中的项目(例如工具栏),请使用pack。对于更复杂的布局(例如整个应用程序、带滚动条的小部件、对话框等),请使用网格。您不能对同一个容器同时使用网格和pack,但您可以在一个容器中使用pack,在另一个容器中使用网格等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值