我正在尝试在正在处理的应用程序的框架上放置一个按钮... 但是当我使用打包或网格
时,框架会消失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()
如果我使用地方,更糟糕的是,它们都会消失......我看不到框架和按钮
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()
我的问题是,
答案 0 :(得分:1)
pack_propagate(0)是什么意思?
pack_propagate(0)
告诉tkinter让父控制它自己的大小,而不是让它的大小由小部件的子节点决定,当使用pack管理子节目时。
为什么使用和不使用pack_propagate(0)
时帧的行为都很奇怪
我没有看到任何奇怪的行为。你必须更准确地说出“怪异”的意思。它的行为与记录一致。 place
不会导致孩子确定父母的大小。如果你不给框架一个尺寸,它的尺寸将是1x1(即:一个像素)。并且,如果框架不可见,框架内的任何小部件也将是不可见的。
当您使用pack
或grid
时,框架会尝试缩小以适合其子项。它不会消失,你只能看到它,因为它的孩子在它上面。如果你添加一些填充,你会看到框架。
例如,在第一个区块中,将grid
上but1
的{{1}}更改为以下代码,并显示黑框:
but1.grid(padx=20, pady=20)
这是place
很少是正确选择的原因之一。 pack
和grid
都可以很好地确保所有小部件的大小都基于其中的内容。
GRID和PLACE
的pack_propagate(0)的等价物
对于grid
,它是grid_propagate
。 place
没有等价物,因为这是place
的定义行为 - 它永远不会影响包含小部件的大小。
对于绝大多数情况,您不应使用pack_propagate(0)
,grid_propagate(0)
或place
。当你正确使用grid
和pack
时,无论分辨率如何,无论用户加载了什么字体,你的gui在你运行的每个平台上的大小都是正确的。