Python 3.x 在Python3/tkinter中,如何设置帧相对于其父窗口大小的大小?

Python 3.x 在Python3/tkinter中,如何设置帧相对于其父窗口大小的大小?,python-3.x,tkinter,window,Python 3.x,Tkinter,Window,在Python3/tkinter中,有没有一种简单的方法可以将ttk.frame的大小设置为相对于其父窗口大小,并确保它在调整窗口大小时(及其所有小部件)能够正确调整 作为一点背景,我正在尝试pack()attk.frame比根窗口宽度小几个像素。如果您知道所需的大小,并已将其设置为: root = # Your root window myFrame = ttk.Frame(root, height=desiredHeight, width=desiredWidth) myFrame.pack

在Python3/tkinter中,有没有一种简单的方法可以将
ttk.frame
的大小设置为相对于其父窗口大小,并确保它在调整窗口大小时(及其所有小部件)能够正确调整


作为一点背景,我正在尝试
pack()
a
ttk.frame
根窗口宽度小几个像素。

如果您知道所需的大小,并已将其设置为:

root = # Your root window
myFrame = ttk.Frame(root, height=desiredHeight, width=desiredWidth)
myFrame.pack()
因此,如果希望它相对于根:

root = # Your root window
rootHeight = root.winfo_height()
rootWidth = root.winfo_width()
# Say you want it to be 20 pixels smaller
myFrame = ttk.Frame(root, height=rootHeight-20, width=rootWidth-20)
myFrame.pack()
# OR
myFrame = ttk.Frame(root) # No set dimensions
myFrame.pack(padx=20, pady=20)
# This will make it have a padding of 20 pixels on height and width,
# with respect to parent rather than itself

这个问题没有单一的答案。使框架相对于父框架的大小可以通过多种方式实现。这取决于帧中的内容,父帧中的内容,这些帧如何使用包、网格或位置,您希望如何处理额外的空间,等等。这个问题写得太宽泛了。他确实特别提到了包的使用,但毕竟似乎很简单。如果我们使用
place()
而不是
pack()
,是否也可以使其相对于父对象(如您的最后两行代码)进行设置?我尝试了一下,使用
place()
我们可以使用类似的方法获得类似效果(在这种情况下,我使用相对于另一个对象的位置播放新帧):
FRAME.place(在其他对象中,relx=.95,y=0,anchor=“se”,relwidth=.9)
。这样,我们得到的框架撕裂有90%的窗口宽度,并且在左右两侧都有5%的水平空间。这也是一个好主意,但要小心,
place
geometry manager非常简单,因此,鉴于这是一个好主意,通常最好避免它,我仍在了解它,但现在,我更倾向于使用pack和grid的组合,以供一般使用,遵循一些stackoverflow用户的建议。但事实上,对于一种特定情况(出现在其他框架顶部的弹出框架),我一直在使用@Bryan Oakley建议的
place
,效果非常好。