Как сделать так, чтобы два виджета в сетке были друг против друга? - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь построить систему обмена сообщениями в окне tkinter, в котором я использую сетку. Я хочу разместить ярлык сверху для сообщений, а справа от него - запись для людей; таким образом, я хочу их полностью грипп sh. Я нашел 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)

Код генерирует изображение ниже, с пробелом между элементами. Не уверен, как это исправить - все мои поиски в Google говорят мне, что все, что мне нужно сделать, это установить pady и ipady в 0, но, видимо, это не работает. Все помощь приветствуется.

What the code generates

РЕДАКТИРОВАТЬ:

Вот полный код:

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

1 Ответ

1 голос
/ 10 апреля 2020

Вы использовали 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()

Сейчас:

enter image description here

...