Как создать кнопку с именем, заданным пользователем в tkinter?

При нажатии на кнопку "+" нужно создать кнопку, при этом пользователь должен задать имя ей. Хотел сделать так, чтобы сначала btn1_name_entry = tk.Entry(), потом btn1_name = btn1_name_entry.get(), а после этого btn1 = tk.Button(text=btn1_name), но выполняется все сразу, в виджете Entry нет ничего полезного и btn1 остается без имени?.

def create_catalog():
    btn1_name_entry = tk.Entry()
    btn1_name_entry.pack(pady=20)
    btn1_name = btn1_name_entry.get()
    btn1 = tk.Button(text=btn1_name)
    btn1.configure(font=('Times New Roman', 14), width=33)
    btn1.pack(pady=0.5, padx=30)

# Основное окно
window = tk.Tk()
window.title('Сохранятель')
window.geometry('800x500')
window.resizable(False, False)

# Кнопка добаления кнопок
btn = tk.Button(text='+', command=create_catalog)
btn.configure(font=('Times New Roman', 16))
btn.place(x=18, y=13, width=45, height=40)

window.mainloop()

Ответы (2 шт):

Автор решения: vlados155

В btn1_name_entry неправильно реализовано считывание введённого текста. Вы создаёте Entry и сразу же считываете текст, который ещё не был введён. Соответственно, считывается пустая строка, и поэтому создаётся кнопка без текста. Вам нужно добавить ещё одну кнопку рядом с btn1_name_entry, при нажатии которой будет выполняться функция, считывающая значение из поля ввода. Прямо в этой функции можно будет создать новую кнопку с текстом из btn1_name_entry.

→ Ссылка
Автор решения: Сергей Ш

как-то так

import tkinter as tk

def display_message(btn_name):
    # Выводим сообщение с именем кнопки
    print(f"Вы нажали кнопку '{btn_name}'")

def create_button(btn_name_entry):
    btn_name = btn_name_entry.get()
    if btn_name:
        btn = tk.Button(text=btn_name, command=lambda: display_message(btn_name))
        btn.configure(font=('Times New Roman', 14), width=33)
        btn.pack(pady=0.5, padx=30)
        # Очищаем поле Entry
        btn_name_entry.delete(0, tk.END)

def create_catalog():
    btn_name_entry = tk.Entry()
    btn_name_entry.pack(pady=20)
    # Привязываем функцию create_button() к событию нажатия кнопки "Создать кнопку"
    create_btn = tk.Button(text="Создать кнопку", command=lambda: create_button(btn_name_entry))
    create_btn.pack(pady=5)
    # Привязываем функцию create_button() к событию нажатия клавиши Enter в Entry
    btn_name_entry.bind('<Return>', lambda event: create_button(btn_name_entry))


window = tk.Tk()
window.title('Сохранятель')
window.geometry('800x500')
window.resizable(False, False)

btn = tk.Button(text='+', command=create_catalog)
btn.configure(font=('Times New Roman', 16))
btn.place(x=18, y=13, width=45, height=40)

window.mainloop()
→ Ссылка