Заполните горизонтальное пространство соседними блокнотами в ткинтер - PullRequest
0 голосов
/ 03 ноября 2019

Я новичок в tkinter, и у меня возникают проблемы с получением ноутбуков для заполнения горизонтального пространства. Я хотел бы разместить две тетради в верхней части окна, рядом. Каждый ноутбук должен занимать половину горизонтального пространства окна.

Я изначально пытался использовать pack, но это делало ноутбуки неравномерно расширяющимися, правый ноутбук занимал больше места, чем левый. Я думал, что grid будет работать лучше, но я не могу понять, как заставить их расширяться, даже с передачей weight=1 в columnconfigure.

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.geometry("800x100")

status = tk.Frame(root)

left_tabs = ttk.Notebook(status)
tab_a = tk.Frame(left_tabs)
tab_b = tk.Frame(left_tabs)
left_tabs.add(tab_a, text="a")
left_tabs.add(tab_b, text="b")
# left_tabs.pack(side=tk.LEFT, fill=tk.X, expand=True)
left_tabs.grid(row=0, column=0)

right_tabs = ttk.Notebook(status)
tab_c = tk.Frame(right_tabs)
tab_d = tk.Frame(right_tabs)
tab_e = tk.Frame(right_tabs)
right_tabs.add(tab_c, text="c")
right_tabs.add(tab_d, text="d")
right_tabs.add(tab_e, text="e")
# right_tabs.pack(side=tk.LEFT, fill=tk.X, expand=True)
right_tabs.grid(row=0, column=1)

tk.Label(tab_a, text="testing").pack()
tk.Label(tab_c, text="testing").pack()

status.columnconfigure(0, weight=1)
status.columnconfigure(1, weight=1)
status.pack(fill=tk.X)

title = tk.Label(root, text="title", bg="grey")
title.pack(fill=tk.X)

tk.mainloop()

Ответы [ 2 ]

1 голос
/ 03 ноября 2019

grid позволяет запросить, чтобы две или более строки или столбца имели одинаковую ширину или высоту. Имя этой опции uniform - если два или более столбцов имеют одинаковые настройки для uniform, они всегда будут одинаковой ширины. Значение uniform не имеет значения, если оно одинаковое.

status.columnconfigure(0, weight=1, uniform="x")
status.columnconfigure(1, weight=1, uniform="x")

screenshot after setting uniform option

Кроме того, вам необходимо использоватьsticky, чтобы ваши записные книжки заполняли выделенное им пространство.

left_tabs.grid(row=0, column=0, sticky="nsew")
right_tabs.grid(row=0, column=1, sticky="nsew")

screenshot after adding sticky option

1 голос
/ 03 ноября 2019

Чтобы макет с сеткой имел все столбцы одинаковой ширины , необходимо настроить эти столбцы так, чтобы они имели одинаковый вес и были одинаковыми uniform group. Эта конфигурация связана с основным виджетом, а не с любым из содержащихся в нем виджетов (поскольку, конечно, столбцы могут содержать много виджетов).

sticky

Определяеткак развернуть виджет, если результирующая ячейка больше, чем сам виджет. Это может быть любая комбинация констант S, N, E и W или NW, NE, SW и SE.

Например, W (запад) означает, что виджет должен быть выровнен по левому краюклеточная граница. W + E означает, что виджет должен быть растянут горизонтально, чтобы заполнить всю ячейку. W + E + N + S означает, что виджет должен быть развернут в обоих направлениях. По умолчанию виджет центрируется в ячейке.

, определяя аргумент sticky при использовании сетки:

left_tabs.grid(row=0, column=0, sticky="NESW")
status.columnconfigure(0, weight=1, uniform="group_name")


right_tabs.grid(row=0, column=1, sticky="NESW")
status.columnconfigure(1, weight=1, uniform="group_name")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...