【问题标题】:pack_propagate(0) equivalent for Grid and placepack_propagate(0) 等效于 Grid 和 place
【发布时间】:2018-02-28 00:46:37
【问题描述】:

我正在尝试在框架上为正在运行的应用程序放置一个按钮... 但是当我使用 packgrid

时,框架消失
from Tkinter import *
root=Tk()
width = root.winfo_screenwidth()
height = root.winfo_screenheight()
root.geometry(str(width)+'x'+str(height))
frame=Frame(root,width=500, height=500, bg='black')
but1=Button(frame,text='qwe')
but1.grid()
frame.grid()
root.mainloop()

如果我使用 place,更糟糕的是,它们都会消失...我看不到 FrameButton

from Tkinter import *
root=Tk()
width = root.winfo_screenwidth()
height = root.winfo_screenheight()
root.geometry(str(width)+'x'+str(height))
frame=Frame(root,width=500, height=500, bg='black')
but1=Button(frame,text='qwe')
but1.place()
frame.place()
root.mainloop()

但是当我使用 pack_propagate(0) 时,我可以同时看到它们...

from Tkinter import *
root=Tk()
width = root.winfo_screenwidth()
height = root.winfo_screenheight()
root.geometry(str(width)+'x'+str(height))
frame=Frame(root,width=500, height=500, bg='black')
but1=Button(frame,text='qwe')
but1.pack()
frame.pack_propagate(0)
frame.pack()
root.mainloop()

我的问题是,

  1. pack_propagate(0) 是什么意思?
  2. 为什么框架在使用和不使用 pack_propagate(0) 的情况下表现异常?
  3. GRIDPLACE 的 pack_propagate(0) 的等效项是什么?

【问题讨论】:

    标签: python python-3.x python-2.7 tkinter tkinter-layout


    【解决方案1】:

    pack_propagate(0) 是什么意思?

    pack_propagate(0) 告诉 tkinter 让父级控制自己的大小,而不是让其大小由小部件的子级决定在使用 pack 管理子级时

    为什么框架在有和没有 pack_propagate(0) 的情况下表现得很奇怪

    我没有看到任何奇怪的行为。您必须更准确地了解“奇怪”的含义。它的行为与记录的一样。 place 不会导致子级确定父级的大小。如果你不给框架一个大小,它的大小将是 1x1(即:单个像素)。而且,如果框架不可见,则框架内的任何小部件也将不可见。

    当您使用packgrid 时,框架将尝试缩小以适合其子项。它并没有消失,你只是可以看到它,因为它的孩子在它上面。如果你添加一些填充,你会看到框架。

    例如,在第一个块中,将您在but1 上调用grid 的位置更改为如下代码,您的黑框将出现:

    but1.grid(padx=20, pady=20)
    

    这就是为什么place 很少是正确选择的原因之一。 packgrid 都非常出色地确保所有小部件都根据它们内部的内容调整大小。

    对于 GRID 和 PLACE,pack_propagate(0) 的等价物是什么

    对于grid,它是grid_propagateplace 没有等价物,因为这是 place 的定义行为——它永远不会影响包含小部件的大小。

    对于绝大多数情况,您不应使用pack_propagate(0)grid_propagate(0)place。当您正确使用gridpack 时,您的gui 在您运行的每个平台上都将是正确的大小,无论分辨率如何,无论用户加载了什么字体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 2012-04-17
      • 1970-01-01
      相关资源
      最近更新 更多