Использование Tkinter для отключения записи с указанным вводом - PullRequest
0 голосов
/ 14 февраля 2020

Я хотел бы использовать Tkinter, чтобы иметь возможность отключить одну запись, если в раскрывающемся меню выбрано «нет».

from tkinter import *

def disableEntry(entry):
    entry.config(state='disable')

def allowEntry(entry):
    entry.config(state='normal')


def main():
    print("test")

root = Tk() #create a TK root window
root.title("Lunch and Learn")  #Title of the window

L1 = Label(root, text = "Label 1").grid(row=0, column=0, padx=30, pady=(20,5))
L2 = Label(root, text = "Label 2").grid(row=1, column=0, pady=5)

var = StringVar()

E1 = Entry(root,bd =3)
E1.grid(row=0, column=1)
D1 = OptionMenu(root,var,"yes","no")
D1.grid(row=1,column=1)

if var.get() == 'no':
    disableEntry(E1)
elif var.get() == 'yes':
    allowEntry(E1)

B2 = Button(text = "Submit", command=main).grid(row=4, column=2)

root.mainloop()

приведенный выше код является простым примером того, что я пробовал. Я создал две функции с именами «disableEntry» и «allowEntry», которые должны изменять состояние поля ввода, но они, похоже, ничего не делают, когда я меняю вход в раскрывающемся меню.

я не Знайте, если я подхожу к этому неправильно или есть стандартизированный способ сделать это.

любая помощь будет оценена.

1 Ответ

1 голос
/ 14 февраля 2020

Вам нужен способ проверить состояние выбора после его изменения. Этого можно достичь, добавив команду обратного вызова в виджет OptionMenu.

Вы проверяли правильную переменную, но точка, в которой вы проверяли ее, была еще до того, как на экране появилось окно.

from tkinter import Label, StringVar, OptionMenu, Entry, Tk, Button

# change the state of the Entry widget
def change_state(state='normal'):
    E1.config(state=state)

def main():
    print("test")

# callback function triggered by selecting from OptionMenu widget
def callback(*args):
    if var.get() == 'no':
        change_state(state='disable')
    elif var.get() == 'yes':
        change_state(state='normal')

root = Tk() #create a TK root window
root.title("Lunch and Learn")  #Title of the window

L1 = Label(root, text="Label 1").grid(row=0, column=0, padx=30, pady=(20, 5))
L2 = Label(root, text="Label 2").grid(row=1, column=0, pady=5)

var = StringVar()

E1 = Entry(root, bd=3)
E1.grid(row=0, column=1)
D1 = OptionMenu(root, var, "yes", "no", command=callback)
D1.grid(row=1, column=1)

B2 = Button(text = "Submit", command=main).grid(row=4, column=2)

root.mainloop()
...