Почему в коде две колонки находятся на разном уровне? И как это исправить?

введите сюда описание изображения

from tkinter import *


window = Tk()
image = PhotoImage(file="QGCXb.png")
window.iconphoto(False, image)
window.title("Skrip")
window.geometry("600x600")
window.resizable(False, False)
map_var = IntVar()
map_var2 = IntVar()

maps = {
    1:'1',
    2:'2',
    3:'3',
    4:'4',
    5:'5',
    6:'6',
    7:'7',
    8:'8'
}

mapse = {
    1:'1.1',
    2:'1.2',
    3:'1.3',
    4:'1.4',
    5:'1.5',
    6:'1.6',
    7:'1.7',
    8:'1.8'
}
for key in maps:
    Radiobutton(window, text=maps[key],
                variable=map_var,
                value=key,
                ).grid(column=0, stick="w")

for key in mapse:
    Radiobutton(window, text=mapse[key],
                variable=map_var2,
                value=key,
                ).grid(column =1, stick="w")
window.mainloop()

Ответы (1 шт):

Автор решения: insolor

При вызове метода grid через параметр row нужно указать индекс строки, в которой нужно выводить виджет. Если параметр row не указать, то при каждом вызове grid будет размещать в следующей строке.

for i, key in enumerate(maps):  # i будет меняться от 0 до количества элементов maps - 1
    Radiobutton(window, text=maps[key],
                variable=map_var,
                value=key,
                ).grid(column=0, row=i, stick="w")

for i, key in enumerate(mapse):
    Radiobutton(window, text=mapse[key],
                variable=map_var2,
                value=key,
                ).grid(column=1, row=i, stick="w")

P.S. ну или через само значение key, раз оно целочисленное, и соответствует номеру строки:

for key in maps:
    Radiobutton(window, text=maps[key],
                variable=map_var,
                value=key,
                ).grid(column=0, row=key, stick="w")

for key in mapse:
    Radiobutton(window, text=mapse[key],
                variable=map_var2,
                value=key,
                ).grid(column=1, row=key, stick="w")
→ Ссылка