Не могу выровнять три текстовых виджета в tkinter - PullRequest
0 голосов
/ 02 октября 2019

Я хотел бы создать три текстовых области в окне tkinter и сделать их динамически изменяемыми. Я думал, что одним из решений было передать параметры ширины и высоты в пикселях (например, height = int (win_height / 2)), но, как я читал, это невозможно, на самом деле параметры ширины и высоты в tk.TextВиджет рассчитывается по символам для каждой строки и столбца. Я также пытался передать параметры ширины и высоты в процентах (например, высота = 50%), но он возвращает синтаксическую ошибку.

Я пытался найти решение этой проблемы вСеть и лучший код, который я нашел, это:

import tkinter as tk

root = tk.Tk()
root.geometry("500x500")

# Text Box
first_textbox = tk.Text(root, width=25, height=10, bg='yellow')
second_textbox = tk.Text(root, width=25, height=10, bg='blue')
third_textbox = tk.Text(root, width=50, height=20, bg='red')

# Packing
first_textbox.grid(column=1, row=1)  
second_textbox.grid(column=1, row=2)
third_textbox.grid(column=2, row=1, rowspan=2)

root.mainloop()

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

1 Ответ

0 голосов
/ 02 октября 2019

grid имеет несколько задокументированных параметров, которые помогут вам сделать то, что вы хотите. Вам просто нужно их использовать.

По умолчанию grid не даст виджетам никакого дополнительного пространства - они занимают только необходимое им пространство и не более. Если для ваших виджетов должно быть выделено дополнительное пространство, вы должны явно организовать это.

Например, если вы хотите, чтобы все виджеты одинаково увеличивались и уменьшались, вам необходимо настроить одинаковые значения для строк и столбцов weight больше нуля. Это скажет сетке, как распределить любое дополнительное пространство, когда окно больше размера, запрошенного всеми виджетами.

Например:

root.grid_rowconfigure((1,2), weight=1)
root.grid_columnconfigure((1,2), weight=1)

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

Например, если вы хотите, чтобы оба столбца 1 и 2 имели одинаковую ширину, вы можете присвоить каждому столбцу одинаковое значение для параметра uniform. Примечание: значение, переданное uniform, может быть любым. Важно то, что они настроены на одинаковое значение.

root.grid_columnconfigure((1, 2), uniform="equal")

Это само по себе не решит проблему. Вы также должны указать grid, что хотите, чтобы виджеты заполняли предоставленное им пространство. Это делается с помощью параметра sticky, который указывает сетке «прикреплять» виджет к одной или нескольким сторонам выделенного пространства.

Чтобы заставить виджеты заполнить все выделенное пространство, вы можете задать строку "nsew", что означает "север, юг, восток и запад", которые представляют четыре стороны данного пространства.

first_textbox = tk.Text(root, width=25, height=10, bg='yellow')
second_textbox = tk.Text(root, width=25, height=10, bg='blue')
third_textbox = tk.Text(root, width=50, height=20, bg='red')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...