【问题标题】:How to get two widgets in grid layout to be flush against each other?如何让网格布局中的两个小部件相互对齐?
【发布时间】:2020-04-09 16:49:34
【问题描述】:

我正在尝试在 tkinter 窗口中构建一个消息传递系统,我在其中使用网格布局。我想在消息的顶部放置一个标签,在其下方有一个条目供人们输入;因此,我希望它们完全冲洗。我发现 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)

代码生成下面的图像,元素之间仍有空格。不知道如何解决这个问题 - 我所有的谷歌搜索都告诉我,我需要做的就是将 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()

【问题讨论】:

  • 在我的电脑里,它们是链接在一起的。也许问题不在这里。可以举个小例子吗?
  • @jizhihaoSAMA 我添加了我正在使用的完整代码。
  • 倒数第二行为mainframe中的所有对象添加填充。

标签: python tkinter label spacing


【解决方案1】:

您最后使用了for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)。这将在mainframe 中添加每个小部件的填充。

最快和最简单的方式来做到这一点,不要改变其他小部件的填充。只需改变你的代码顺序:

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()

现在:

【讨论】:

    猜你喜欢
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多