Если вы хотите расширить виджеты при изменении размера окна, вы можете использовать expand
и fill
в pack()
в различных комбинациях. Все зависит от того, какой элемент вы хотите расширить и в каком направлении.
.pack(fill='x')
.pack(fill='y')
.pack(fill='both')
.pack(expand=True, fill='x')
.pack(expand=True, fill='y')
.pack(expand=True, fill='both')

Если вы хотите изменить размер окна, чтобы увидеть весь новый текст в Entry
, вы можете использовать widget.configure(width=...)
. Запись использует количество символов в качестве ширины.
Вы можете использовать длину предложения, чтобы изменить ширину
result.configure(width=len(sentence))
или оставить ширину не менее 20 символов
length = max(20, len(sentence))
result.configure(width=length)
Полный код
import tkinter as tk
import random
# --- functions ---
verbs = ["goes to", "walks through", "runs through"]
def generate():
user_name = name_entry.get()
move_verb = random.choice(verbs)
place = place_entry.get()
noun = object_entry.get()
sentence = '{} {} a {} and finds a {}.'.format(user_name, move_verb, place, noun)
result.delete(0, 'end')
result.insert(0, sentence)
length = max(20, len(sentence))
result.configure(width=length)
# --- main ---
window = tk.Tk()
user_name_label = tk.Label(window, text="Enter a name: ")
name_entry = tk.Entry(window)
object_label = tk.Label(window,text="Enter an object: ")
object_entry = tk.Entry(window)
place_label = tk.Label(window, text="Enter a place: ")
place_entry = tk.Entry(window)
button = tk.Button(window, text="Generate story", command=generate)
result = tk.Entry(window)
user_name_label.pack(expand=True, fill='both')
name_entry.pack(fill='both')
object_label.pack(expand=True, fill='both')
object_entry.pack(fill='both')
place_label.pack(expand=True, fill='both')
place_entry.pack(fill='both')
button.pack(expand=True, fill='both')
result.pack(fill='both')
window.mainloop()