#python #button #tkinter #tk
#питон #кнопка #ткинтеръ #тз-инструментарий #tkinter #tk-toolkit
Вопрос:
Привет, я использую Tkinter Python, и у меня есть запись имени.
Если введено неверное имя, в новом окне появится сообщение об ошибке. Я хочу, чтобы исходное окно или кнопка были выделены серым цветом, пока открыта эта ошибка, а затем вернулись к нормальному состоянию, как только оно будет закрыто. Возможно ли это? Я не хочу, чтобы кнопка была засыпана спамом и открывала несколько окон с ошибками.
Комментарии:
1. Вы можете использовать
tkinter.messagebox.showerror()
который отключит родительское окно, когда оно будет показано.
Ответ №1:
Я расскажу вам о 2 подходах к этому.
Я бы предложил использовать tkinter.messagebox
, чтобы показать ошибку (или информацию) пользователю, потому что это отключит root
окно до тех пор, пока оно не останется открытым. Он воспроизводит звуки в соответствии с системными настройками и позволяет нажимать enter для закрытия всплывающего окна
Вот так::
import tkinter as tk
import tkinter.messagebox as msgb # use your preferred import style
def submit():
if e.get() == 'something': # check input here
doSomething()
else:
msgb.ShowError('Invalid input', 'seems like you entered incorrect name')
root = tk.Tk()
e = tk.Entry(root)
e.pack()
btn = tk.Button(root, text='Submit', command=submit)
btn.pack()
root.mainloop()
2-й подход:
Если вам действительно нужно использовать только окно верхнего уровня и выделить поле ввода серым цветом (и / или кнопку) — вот как
import tkinter as tk
def submit():
if e.get() == 'something': # check input here
doSomething()
else:
e.configure(state=tk.DISABLED)
btn.configure(state=tk.DISABLED)
newWindow = tk.Toplevel()
showSomethingHere()
root = tk.Tk()
e = tk.Entry(root)
btn = tk.Button(root, text='Submit', command=submit)
e.pack()
btn.pack()
root.mainloop()