我尝试学习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()
我希望当用户展开窗口时按钮和标签会展开。
我尝试添加
root.grid_columnconfigure(0,weight=1)
root.grid_columnconfigure(1,weight=1)
root.grid_rowconfigure(0,weight=1)
root.grid_rowconfigure(1,weight=1)
但它确实不起作用......
答案 0 :(得分:2)
正如Bryan在评论中提到的,每个父窗口小部件对象都需要管理它们的子几何体。您尝试的解决方案不起作用,因为grid_rowconfigure
和grid_columnconfigure
完成的几何管理会影响小部件的子项,但不影响任何孙子。您的root
在其1x1网格中只有一个窗口小部件对象。这意味着root
的配置方法基本上没有任何内容,如果该网格索引首先不存在。
由于您的root
网格中包含content
的1x1网格。然后,您的content
还有另一个1x1网格,其中包含myButtons
。最后它有一个2x2网格,其中包含按钮:one
,two
,three
,four
。
当您调整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
; one
,two
,three
,four
调整大小。你最终需要:
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)