以下是尝试在窗口重新调整大小时让窗口小部件保持在屏幕中央。我的意思是网格sticky='ew'
的正常行为,框架打包以展开fill='x'
。这是一些演示代码来显示我的意思:
from Tkinter import Frame,Button,Label
from ttk import Notebook
root = Frame()
root.pack(expand=True,fill='both')
nb = Notebook(root)
btn_f = Frame(nb)
Button(btn_f, text="Button Packed").pack(pady=100,padx=100)
# btn_f.pack(expand=True,fill='both') #makes no difference if this is removed
lbl_f = Frame(nb)
Label(lbl_f, text="This label is in a grid").grid(pady=100,sticky='ew')
# lbl_f.grid() #makes no difference if this is removed
nb.add(btn_f, text="Button")
nb.add(lbl_f, text="Label")
nb.pack(expand=True,fill='x')
root.mainloop()
我的怀疑与我发现的关于评论和扩展的内容有关。 Notebook中的add方法是否运行它自己的布局管理器来处理框架的放置方式?我要问的是如何实现以网格为中心的效果,就像我在使用pack的第一个选项卡中演示的那样?
答案 0 :(得分:1)
此代码使其行为与打包button
的行为相同。
lbl_f = Frame(nb)
Label(lbl_f, text="This label is in a grid").grid(pady=100,sticky='ew')
lbl_f.grid()
lbl_f.rowconfigure('all', weight=1)
lbl_f.columnconfigure('all', weight=1)
如您所见,row
/ columnfigure
已应用于frame
元素。
P.S。 我建议你稍微修改你的代码。如果您更改小部件(例如),它将使您的工作更轻松:
Button(btn_f, text="Button Packed").pack(pady=100,padx=100)
到
packedButton = Button(btn_f, text="Button Packed")
packedButton.pack(pady=100,padx=100)
这样,您可以稍后参考按钮(或任何小部件)。您不能在同一行上创建/打包(或网格化)小部件;必须单独关闭,如此处所示。
另一个积极的变化是使用类。 SO上有很多例子,但是如果这个问题中的代码只是一个快速的样本,那么你就会有更多的权力。祝你好运!