Python: если оператор / Else не работает при выполнении условия - PullRequest
0 голосов
/ 26 апреля 2020

Я имею дело с проблемой, что мое выражение if / else не работает, когда условие выполнено.

Дело в том, что я хочу установить мою конфигурацию кнопки ("submit") на state = NORMAL , когда в области ввода более одного символа. Я думаю, что код правильный, но проблема может быть вызвана статичностью кода. В других случаях требуется команда (щелчок или другое событие) для вызова, но здесь речь идет только об изменении содержимого записи, и я не уверен, как ее кодировать.

Ниже приведена функция с кнопкой и мое заявление if / else. Я благодарен за вашу помощь и любые советы.

def sign():
    infoLabel = Label(root, text="Enter your name: ").grid(row=0, column=0)
    global e
    e = Entry(root, width=25)
    e.grid(row=0, column=1, columnspan=2)
    submit = Button(root, text="Submit", command=signbtn)
    submit.grid(row=0, column=3)

    if len(e.get()) == 0:
        submit.config(state=DISABLED)
    else:
        submit.config(state=NORMAL)

Ответы [ 2 ]

2 голосов
/ 26 апреля 2020

Давайте уточним что-нибудь, пожалуйста. Когда следует установить состояние «нормальное»? Когда длина области входа больше одного (>) или больше или равна (> =) чем один? Я предполагаю, что второе основано на вашем коде. Кроме того, это tkinter?

Теперь, в вашей указанной задаче c, я вижу в вашем коде то, что вы создаете запись, а затем сразу и только один раз проверяете, равна ли ее длина нулю. Поскольку ваша проверка находится в функции, она выполняется правильно, и никто еще не редактировал эту запись, поэтому она пустая. Следовательно, он имеет len(e.get()) == 0, поэтому он устанавливает state=DISABLED независимо от того, что произойдет после этого.

Наконец, вы должны принять во внимание ответ @Premkumar chalmeti, учитывая глобальные переменные

0 голосов
/ 26 апреля 2020

@ Мартин, чтобы ответить на ваш вопрос точно, не могли бы вы сбросить, какой метод e.get() возвращает?

Ваш код может сломаться в некоторых угловых случаях (если e.get() возвращает None и т. Д. c каким-то образом вы никогда не узнаете), поэтому я предлагаю ниже фрагмент и некоторые улучшения, которые я думал.

Вы можете уменьшить значение if / else до одной строки и сделать его более читабельным,

submit.config(state=NORMAL if e.get() else DISABLED)

Кроме того, по возможности следует избегать использования глобальных переменных.

def sign(e):
    infoLabel = Label(root, text="Enter your name: ").grid(row=0, column=0)

    e = Entry(root, width=25)
    e.grid(row=0, column=1, columnspan=2)

    submit = Button(root, text="Submit", command=signbtn)
    submit.grid(row=0, column=3)
    submit.config(state=NORMAL if e.get() else DISABLED)

    return e
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...