#python #tkinter
Вопрос:
Итак, я пытаюсь сделать так, чтобы, если поле ввода == пароль (123), кнопка для продолжения (кнопка ввода) становится активной, а не отключенной. Я смог сделать это только с помощью 2 кнопок, хотя, если ввести «123», а затем удалить, состояние «кнопка ввода» не изменится. Как я мог бы сделать эту функцию полностью в «кнопке ввода» вместо того, чтобы иметь 2 кнопки, а также обновлять ее, если указанный пароль удален?
root = Tk() root.geometry("500x300") e = Entry(root) e.insert(0, "Enter your password") def check(): password = e.get() if password == "123": enterbutton["state"] = ACTIVE if password != "123": enterbutton["state"] = DISABLED button = Button(root, text="b", width=10, height=3, command=check) enterbutton = Button(root, text="Enter", state=DISABLED, width=10, height=3,) e.pack(pady=30) enterbutton.pack() button.pack() mainloop()
Комментарии:
1. Непонятно, чего вы хотите на самом деле? Вы хотели
Enter
, чтобы кнопка включалась/отключалась сама по себе при использованииb
кнопки?2. Да, я хочу, чтобы кнопка ввода была отключена/включена в соответствии с тем, есть ли «123» в поле ввода. @acw1668
3. Вы имеете в виду, что
Enter
кнопка будет включена/отключена в зависимости от содержимогоEntry
виджета без нажатия какой-либо кнопки ?
Ответ №1:
Я предлагаю использовать StringVar для поля ввода. Используя его trace
метод, вы можете задать функцию, которая вызывается каждый раз при изменении текста. Кроме того, я настоятельно рекомендую импортировать tkinter как tk
вместо импорта всего с помощью * импорт.
import tkinter as tk root = tk.Tk() root.geometry("500x300") var = tk.StringVar() var.set("Enter your password") e = tk.Entry(root, textvariable=var) def check(*args): password = var.get() if password == '123': button['state'] = 'normal' else: button['state'] = 'disabled' var.trace('w', check) button = tk.Button(root, text="Enter", state='disabled', width=10, height=3,) e.pack(pady=30) button.pack() root.mainloop()