Вложенные макеты с Tkinter - PullRequest
       7

Вложенные макеты с Tkinter

0 голосов
/ 07 января 2020

В документации Tk говорится (последний раздел), что вложенные макеты могут быть достигнуты с помощью tk.frame. Следующий небольшой пример не работает должным образом, вместо:

enter image description here

import tkinter as tk

window = tk.Tk()
window.geometry('250x100')

# first level, window as parent
tk.Label(window, text='Choose file:').grid(row=0, column=0, sticky=tk.W)
tk.Button(window, text='Browse ...').grid(row=1, column=0, sticky=tk.W)
fr = tk.Frame(window).grid(row=2, column=0, sticky=tk.W)

# nested, frame as parent
tk.Entry(fr).grid(row=0, column=0, sticky=tk.W)
tk.Entry(fr).grid(row=0, column=1, sticky=tk.W)

tk.mainloop()

он производит:

enter image description here

Реальный интерфейс гораздо сложнее, поэтому я действительно хочу использовать вложенные сетки вместо одной сетки с несколькими столбцами.

1 Ответ

1 голос
/ 07 января 2020

AFAIK, tkinter не дает интуитивно понятных результатов, если вы создаете объект и сетку одновременно. Это должно дать вам тот же результат с документацией:

import tkinter as tk

window = tk.Tk()
window.geometry('250x100')

# first level, window as parent
tk.Button(window, text='Browse ...').grid(row=1, column=0, sticky=tk.W)
tk.Label(window, text='Choose file:').grid(row=0, column=0, sticky=tk.W)
fr = tk.Frame(window)
fr.grid(row=2, column=0, sticky=tk.W)

# nested, frame as parent
entry1 = tk.Entry(fr)
entry1.grid(row=0, column=0, sticky=tk.W)
entry2 = tk.Entry(fr)
entry2.grid(row=0, column=1, sticky=tk.W)

tk.mainloop()
...