【问题标题】:Tkinter Parent Frame seems to shrinks inside ButtonTkinter Parent Frame 似乎在 Button 内缩小
【发布时间】:2020-04-02 21:12:42
【问题描述】:

我正在努力在框架内显示一个按钮(其中将包含其他按钮)。我将把这个框架放入的根窗口必须组织为一个网格(会有更多的小部件),但框架必须用 pack() 组织。我的目标是让 Frame 填充它分配给的 Grid 单元格,并在该框架内显示按钮。

但是,当我启动此程序时,框架似乎消失或缩小到按钮内。

我怎样才能使框架保持原来的尺寸和里面的按钮?

from tkinter import *

root = Tk()
root.geometry('300x300')

frame=Frame(root, bg="green", width=150, height=150)
frame.grid(row=0, column=0)

Breset=Button(frame,text='Reset', bg='pink')
Breset.pack()

root.mainloop()

【问题讨论】:

    标签: python tkinter tkinter-layout


    【解决方案1】:

    我怎样才能使框架保持原来的尺寸和里面的按钮?

    你几乎不想这样做。如果您将更多小部件放入其中,框架自然会选择合适的尺寸以适合所有东西。

    如果您想让框架填满窗口,您可以使用各种grid 选项来实现。不过,如果您希望框架始终填满整个窗口,使用 pack 比使用 grid 更容易。

    包解决方案

    要让frame 填充根窗口,只需将fillexpand 选项与pack 一起使用:

    frame.pack(fill="both", expand=True)
    

    网格解决方案

    使用grid 需要更多步骤。首先,您需要使用sticky 选项,以便框架填充它分配的空间。接下来,您需要告诉grid 为框架分配未分配的空间。

    root.grid_rowconfigure(0, weight=1)
    root.grid_columnconfigure(0, weight=1)
    frame.grid(row=0, column=0, sticky="nsew")
    

    关闭框架的自动调整大小

    您最初要求的称为几何传播 - 这是子代的大小传播到父代的特征。您可以使用grid_propagatepack_propagate 将其关闭,具体取决于您用于子小部件的内容。在您的情况下,您使用 pack 作为框架内的按钮:

    frame.pack_propagate(False)
    

    这几乎总是三个解决方案中最差的。几何管理器 packgrid 的全部意义在于让 t​​kinter 完成决定小部件大小的所有工作。

    【讨论】:

      猜你喜欢
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多