python tkinter labelframe_python – 在多个Tkinter LabelFrame之间使用网格对齐小部件

我正在尝试创建一个Tkinter布局,其中标签和输入字段在多个LabelFrame框中垂直对齐.

这是一些简化的代码:

#!/usr/bin/python

from Tkinter import *

win = Frame()

win.grid(sticky=N+S+E+W)

frame_a = LabelFrame(win, text='Top frame', padx=5, pady=5)

frame_b = LabelFrame(win, text='Bottom frame', padx=5, pady=5)

frame_a.grid(sticky=E+W)

frame_b.grid(sticky=E+W)

for frame in frame_a, frame_b:

for col in 0, 1, 2:

frame.columnconfigure(col, weight=1)

Label(win, text='Hi').grid(in_=frame_a, sticky=W)

Label(win, text='Longer label, shorter box').grid(in_=frame_b, sticky=W)

Entry(win).grid(in_=frame_a, row=0, column=1, sticky=W)

Entry(win, width=5).grid(in_=frame_b, row=0, column=1, sticky=W)

win.mainloop()

上面的代码生成一个如下所示的窗口:

虽然我想找到一些对齐字段的方法,所以窗口看起来更像这样(感谢MS Paint):

我已经玩过grid()的in_参数,但没有取得很大的成就,我想不出任何其他的东西可以试验.

最佳答案 简短的回答是:你不能做你想做的事. grid不会跨多个容器管理其行和列.

但是,至少有几种方法可以达到您想要的效果.一种方法是为每个容器中的第一列提供明确的相同宽度.为此,您可以使用grid_columnconfigure方法为每列提供最小宽度.

另一种解决方案是为每个标签赋予相同的宽度,这有效地将第一列的宽度设置为相同(假设每个容器中的所有列具有相同的重量).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值