Как создать кнопку с именем, заданным пользователем в 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 шт):
В 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()