【问题标题】:Stretching frames using grid layout in Python Tkinter在 Python Tkinter 中使用网格布局拉伸帧
【发布时间】:2012-04-01 11:41:02
【问题描述】:

我正在尝试将 Python 2.6.7 与 Tkinter 一起使用。我希望下面的代码可以将第一个按钮拉伸到第二个按钮的宽度,但两个按钮的宽度都只有适合其文本所需的宽度。

#!/usr/bin/python
from Tkinter import *

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

inner_a = Frame(win)
inner_a.grid(row=0, column=0, sticky=N+E+W)
inner_b = Frame(win)
inner_b.grid(row=1, column=0, sticky=S+E+W)

Button(inner_a, text='1').grid(row=0, column=0, sticky=E+W)
Button(inner_b, text='Some long text').grid(row=0, column=0, sticky=E+W)

win.mainloop()

据我了解,win 中的单列会扩展到它所包含的最大内容的宽度,即inner_b 的宽度,然后是inner_a 的宽度,然后是第一个按钮的宽度,将是第二个按钮的那个。

实际上,发生的情况如下;第一个按钮的宽度仅足以包含“1”,没有第二个按钮那么宽。

我需要做什么才能让第一个按钮扩大第二个按钮的大小?

【问题讨论】:

    标签: python user-interface tkinter


    【解决方案1】:

    如果您希望小部件在网格中排列,首先要做的是确保它们具有相同的父级。如果所有小部件的大小都相同或者您只使用一列,则这不是绝对必要的。

    你需要做的另一件事是给你的专栏一个权重。您的代码中发生的情况是小部件 扩展以填充列,但列未扩展以填充主。如果你给它一个权重1,它会。你需要做类似inner_a.columnconfigure(1, weight=1) 的事情,然后对inner_b 做同样的事情。

    【讨论】:

    • 不能为小部件提供相同的直接父级;这是真正问题的一个最小示例,其中将相关小部件作为直接子级确实不是一种选择。固定重量(对于列0,而不是您的答案中的1)对其进行了排序,谢谢!
    • @me_and:您知道您可以将小部件放入与其父容器不同的容器中吗?这是一项非常有价值的技术。网格中有一个in_ 选项,可以执行此操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    相关资源
    最近更新 更多