如何让网格布局中的两个小部件相互齐平?
How to get two widgets in grid layout to be flush against each other?
我正在尝试在 tkinter window 中构建消息系统,我在其中使用网格布局。我想在消息的顶部放置一个标签,在其正下方有一个条目供人们输入;因此,我希望它们完全齐平。我发现 pady 和 ipady 应该这样做,但即使将两者都设置为 0:
Label(mainframe, background='white', text='asdasdasdasdasd', anchor=W, justify=LEFT, bd=1, relief='solid').grid(column=1, row=3, sticky=(W,E), columnspan=3, pady=0, ipady=0,padx=0,ipadx=0)
Entry(mainframe, background='white', bd=1, relief='sunken').grid(column=1, row=4, sticky=(W,E), columnspan=3, pady=0, ipady=0, padx=0,ipadx=0)
代码生成下面的图像,space 仍在元素之间。不知道如何解决这个问题——我所有的谷歌搜索都告诉我,我需要做的就是将 pady 和 ipady 设置为 0,但显然这不起作用。感谢所有帮助。
编辑:
完整代码如下:
from tkinter import *
root = Tk()
root.title("title")
mainframe = Frame(root)
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
Label(mainframe, text='Left Label').grid(column=1, row=1, sticky=(W, E), rowspan=2)
Label(mainframe, background='white', text='asdasdasdasdasd', anchor=W, justify=LEFT, bd=1, relief='solid').grid(column=1, row=3, sticky=(W,E), columnspan=3, pady=0, ipady=0,padx=0,ipadx=0)
Entry(mainframe, background='white', bd=1, relief='sunken').grid(column=1, row=4, sticky=(W,E), columnspan=3, pady=0, ipady=0, padx=0,ipadx=0)
Label(mainframe, text="Center Area").grid(column=2, row=1, sticky=W, rowspan=2)
Label(mainframe, text="Right Label").grid(column=3, row=1, sticky=W, rowspan=2)
for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
root.mainloop()
您在 last.This 中使用了 for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
将在 mainframe
中添加每个小部件的填充。
最快最简单的方法,不要更改其他代码的填充 widgets.Just 更改代码的顺序:
from tkinter import *
root = Tk()
root.title("title")
mainframe = Frame(root)
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
Label(mainframe, text='Left Label').grid(column=1, row=1, sticky=(W, E), rowspan=2)
Label(mainframe, text="Center Area").grid(column=2, row=1, sticky=W, rowspan=2)
Label(mainframe, text="Right Label").grid(column=3, row=1, sticky=W, rowspan=2)
for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
Label(mainframe, background='white', text='asdasdasdasdasd', anchor=W, justify=LEFT, bd=1, relief='solid').grid(column=1, row=3, sticky=(W,E), columnspan=3, pady=0, ipady=0,padx=0,ipadx=0)
Entry(mainframe, background='white', bd=1, relief='sunken').grid(column=1, row=4, sticky=(W,E), columnspan=3, pady=0, ipady=0, padx=0,ipadx=0)
root.mainloop()
现在:
我正在尝试在 tkinter window 中构建消息系统,我在其中使用网格布局。我想在消息的顶部放置一个标签,在其正下方有一个条目供人们输入;因此,我希望它们完全齐平。我发现 pady 和 ipady 应该这样做,但即使将两者都设置为 0:
Label(mainframe, background='white', text='asdasdasdasdasd', anchor=W, justify=LEFT, bd=1, relief='solid').grid(column=1, row=3, sticky=(W,E), columnspan=3, pady=0, ipady=0,padx=0,ipadx=0)
Entry(mainframe, background='white', bd=1, relief='sunken').grid(column=1, row=4, sticky=(W,E), columnspan=3, pady=0, ipady=0, padx=0,ipadx=0)
代码生成下面的图像,space 仍在元素之间。不知道如何解决这个问题——我所有的谷歌搜索都告诉我,我需要做的就是将 pady 和 ipady 设置为 0,但显然这不起作用。感谢所有帮助。
编辑:
完整代码如下:
from tkinter import *
root = Tk()
root.title("title")
mainframe = Frame(root)
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
Label(mainframe, text='Left Label').grid(column=1, row=1, sticky=(W, E), rowspan=2)
Label(mainframe, background='white', text='asdasdasdasdasd', anchor=W, justify=LEFT, bd=1, relief='solid').grid(column=1, row=3, sticky=(W,E), columnspan=3, pady=0, ipady=0,padx=0,ipadx=0)
Entry(mainframe, background='white', bd=1, relief='sunken').grid(column=1, row=4, sticky=(W,E), columnspan=3, pady=0, ipady=0, padx=0,ipadx=0)
Label(mainframe, text="Center Area").grid(column=2, row=1, sticky=W, rowspan=2)
Label(mainframe, text="Right Label").grid(column=3, row=1, sticky=W, rowspan=2)
for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
root.mainloop()
您在 last.This 中使用了 for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
将在 mainframe
中添加每个小部件的填充。
最快最简单的方法,不要更改其他代码的填充 widgets.Just 更改代码的顺序:
from tkinter import *
root = Tk()
root.title("title")
mainframe = Frame(root)
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
Label(mainframe, text='Left Label').grid(column=1, row=1, sticky=(W, E), rowspan=2)
Label(mainframe, text="Center Area").grid(column=2, row=1, sticky=W, rowspan=2)
Label(mainframe, text="Right Label").grid(column=3, row=1, sticky=W, rowspan=2)
for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
Label(mainframe, background='white', text='asdasdasdasdasd', anchor=W, justify=LEFT, bd=1, relief='solid').grid(column=1, row=3, sticky=(W,E), columnspan=3, pady=0, ipady=0,padx=0,ipadx=0)
Entry(mainframe, background='white', bd=1, relief='sunken').grid(column=1, row=4, sticky=(W,E), columnspan=3, pady=0, ipady=0, padx=0,ipadx=0)
root.mainloop()
现在: