Причина окно настолько высок, потому что вы не даете явный рост к чему-либо, так Tkinter приходится полагаться на свои значения по умолчанию. По умолчанию текстовый виджет будет составлять 24 строки.
Виджет справа использует самый высокий шрифт, в результате чего он является самым высоким виджетами в окне. Окно будет стараться соответствовать всем, поэтому, если вы уменьшите размер этого текстового виджета, все окно будет меньше.
self.island = Text(app, ..., height=9)
Я не знаю, что вы Эман на «текст в первой колонке [останавливается] до конца строки». Я не вижу, чтобы он останавливался, я вижу, что он обертывается так, как я ожидал, и так же, как вы его инструктировали. Вы устанавливаете ширину в 10 символов и должны сообщать об этом в границах слов.
Кроме того, когда вы используете grid
, как правило, вы должны указать хотя бы один ряд и один столбец весом. Вес заключается в том, как Tkinter знает, как выделить дополнительное пространство. Обратите внимание, что если вы изменяете размер окна, виджеты внутри не растут и не сокращаются. Это потому, что строки и столбцы, в которых они находятся, имеют значение по умолчанию 0 (ноль).
Чтобы изменить это, используйте row_configure
и column_configure
. Например, если вы хотите, синяя область расширить, чтобы занять все дополнительное пространство, дать это строка и столбец масса 1 (один):
app.grid_rowconfigure(0, weight=1)
app.grid_columnconfigure(1, weight=1)
Если вы сделаете это вы найдете .... ничего не меняется. Tkinter действительно предоставит дополнительное пространство для строк 0 и столбца 1. Однако вам нужно больше сделать. Вы должны использовать атрибут sticky
при вызове grid
, чтобы просить, чтобы виджет «прилипал» к краям предоставленного ему пространства.
self.info.grid(row=0,column=0,sticky=N+S+E+W)
...
self.island.grid(row=0,column=1,sticky=N+S+E+W)
Когда вы это сделаете, вы увидите .... ничего не меняется. Это потому, что app
является фреймом, и этот фрейм находится внутри корневого окна. Однако вы не указали вес для строки и столбца, в котором находится app
, и вы также не указали для него значение sticky
.
Однако, если ваше корневое окно имеет только один виджет, немного проще использовать pack
, а не сетку. Причина, по которой я говорю это, заключается в том, что вам не нужно беспокоиться о настройке веса строки и столбца.
Попробуйте изменить эту строку:
app.grid()
... к этому:
app.pack(fill="both", expand=True)
При этом, вы увидите, что теперь виджеты заполнить окно, и при изменении размеров окна все это изменяется соответствующим образом.
Как интересное упражнение, попробуйте добавить эту строку, где вы установите вес приложения. Оставьте другие линии там, вы хотите, чтобы обе колонки имели вес. Попробуйте и обратите внимание, что произойдет, когда вы вручную измените размер окна.
app.grid_columnconfigure(0, weight=1)
Обратите внимание, что оба внутренних виджета расширяются. Столбы имеют одинаковый вес, поэтому они расширяются одинаково. Чтобы получить право на расширение вдвое больше, чем налево, установите его вес на 2.
Я не понимаю эту часть вопроса: «Почему текст в первом столбце останавливается до конца строки» , Мне кажется, что он не «останавливается» для меня - он переносится на следующую строку. Это то, что вы имели ввиду? –
С кодом, как есть, текст останавливается на «сокровище». «Продолжайте охотиться, пока не найдете ее. Удачи!» пропал, отсутствует. Я предполагаю, что вертикальное пространство первого столбца заполнено, хотя оно выглядит иначе из-за вертикальной высоты правого столбца. – Robin