кнопка выделения серым цветом при открытии окна верхнего уровня

#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()