Виджет tkinter.Text превышает ограничения менеджера сетки - PullRequest
0 голосов
/ 25 мая 2018

TL; DR:

Текстовый виджет расширяется дальше указанного столбца, строки строки вызова grid().Единственным разрешением является изменение атрибутов .width и .height на что-то маленькое и принудительное расширение и заполнение флага привязки вызова с использованием 'nsew'.

Фон:

Виджет «Текст» вызвал у меня некоторую путаницу. Возьмем, к примеру, следующее:

root = Tk()
root.geometry('400x400')
root.grid_columnconfigure(0, weight = 1)
root.grid_columnconfigure(1, weight = 1)
root.grid_rowconfigure(0, weight = 1)
root.grid_rowconfigure(1, weight = 1)
b = Button(root)
b.grid(column = 0, row = 0, sticky = 'nsew')
t = Text(root)
t.grid(column = 1, row = 1, sticky = 'nsew')

Учитывая это, у меня должно быть окно размером 400x400, например:

+-------+-------+
|       |       |
|   b   |       |
|       |       |
+-------+-------+
|       |       |
|       |   t   |
|       |       |
+-------+-------+

Нов конечном итоге текстовый виджет выходит далеко за нижний правый столбец, строка:

+---+-----------+
| b |           |
+---+           |
|   |     t     |
|   |           |
|   |           |
|   |           |
+---+-----------+

Единственный способ решить эту проблему - изменить текстовый виджет следующим образом:

t = Text(root, height = 1, width = 1)

Затем липкий вызов расширяет виджет, чтобы он помещался только в столбце, строке сетки.Однако это выглядит как дополнительный шаг, который мне не нужно предпринимать, хотя виджет «Текст» по умолчанию равен .width и .height, как и все остальные виджеты.

Вопрос: Почему виджет Текст расширяется за пределы указанного столбца, строки сетки?

1 Ответ

0 голосов
/ 25 мая 2018

Вопрос: Почему виджет Текст расширяется за пределы указанного столбца, строки сетки?

Нет;все наоборот: строки и столбцы расширяются, чтобы соответствовать текстовому виджету.Это не уникально для текстового виджета.Tkinter попытается упорядочить вещи так, чтобы любой виджет отображался в требуемом размере, если это возможно.В случае текстового виджета размер по умолчанию составляет 80 символов на 24 символа, поэтому строка и столбец расширяются, чтобы соответствовать этому виджету.

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

Добавьте следующее в ваш пример кода:

bottom_edge = Frame(root, background="red", height=4)
right_edge = Frame(root, background="red", width=4)
bottom_edge.grid(row=2, column=0, columnspan=3, sticky="ew")
right_edge.grid(row=0, column=2, rowspan=3, sticky="ns")

Вам придется изменить размер окна, так как вы сделали окно слишком маленьким, чтобы вместить все.Как только вы это сделаете, вы увидите красную рамку справа и снизу, показывающую, что расширяется строка и столбец, а не текстовый виджет, расширяющийся за пределы строки и столбца.Текстовый виджет находится в границах второй строки, второго столбца.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...