Python tkinter - 当用户扩展窗口时如何调整窗口小部件的大小

时间:2017-11-05 23:47:50

标签: python tkinter

我尝试学习python和Tkinter,我必须开发一个小型用户界面。基本上,屏幕上有4个按钮,我将LabelFrame放在同一个标​​签上。

from tkinter import *

root = Tk()
root.title('Example')

content=Frame(root)
myButtons=LabelFrame(content, text="My Buttons", padx=7, pady=7)

one = Button(myButtons, text="Button 1")
two = Button(myButtons, text="Button 2")
three = Button(myButtons, text="Button 3")
four = Button(myButtons, text="Button 4")

content.grid(column=0, row=0)
myButtons.grid(column=0, row=0)

one.grid(column=0, row=0)
two.grid(column=1, row=0)
three.grid(column=0, row=1)
four.grid(column=1, row=1)

root.mainloop()

picture

我希望当用户展开窗口时按钮和标签会展开。

我尝试添加

root.grid_columnconfigure(0,weight=1)
root.grid_columnconfigure(1,weight=1)
root.grid_rowconfigure(0,weight=1)
root.grid_rowconfigure(1,weight=1)

但它确实不起作用......

1 个答案:

答案 0 :(得分:2)

正如Bryan在评论中提到的,每个父窗口小部件对象都需要管理它们的子几何体。您尝试的解决方案不起作用,因为grid_rowconfiguregrid_columnconfigure完成的几何管理会影响小部件的子项,但不影响任何孙子。您的root在其1x1网格中只有一个窗口小部件对象。这意味着root的配置方法基本上没有任何内容,如果该网格索引首先不存在。

由于您的root网格中包含content的1x1网格。然后,您的content还有另一个1x1网格,其中包含myButtons。最后它有一个2x2网格,其中包含按钮:onetwothreefour

当您调整root的大小时如果您希望content也调整大小,则需要:

content.grid_configure(sticky="nsew")
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

但是这只允许content帧调整大小,但不一定是其中的内容。如果您想使用它调整myButtons的大小,则需要:

myButtons.grid_configure(sticky="nsew")
content.grid_rowconfigure(0, weight=1)
content.grid_columnconfigure(0, weight=1)

但同样,只允许您在其父myButtons调整大小时调整content LabelFrame的大小。它仍然不会让孩子们进入myButtons; onetwothreefour调整大小。你最终需要:

one.grid_configure(sticky="nsew")
two.grid_configure(sticky="nsew")
three.grid_configure(sticky="nsew")
four.grid_configure(sticky="nsew")

myButtons.grid_rowconfigure(0, weight=1)
myButtons.grid_rowconfigure(1, weight=1)
myButtons.grid_columnconfigure(0, weight=1)
myButtons.grid_columnconfigure(1, weight=1)