Предложение Tkinter else выполняется перед оператором if при активации кнопки - PullRequest
0 голосов
/ 15 марта 2020
def delFile(self, num):
    if os.path.exists("quiz"+str(num)+".txt"):
        os.remove("quiz"+str(num)+".txt")
        tkinter.messagebox.showinfo("Removed!", "Quiz successfully Removed!")
    else:
        tkinter.messagebox.showinfo("Error!", "Quiz file not found!")

    if os.path.exists("answer"+(num)+".txt"):
        os.remove("answer"+(num)+".txt")
        tkinter.messagebox.showinfo("Removed!", "Answers successfully Removed!")
    else:
        tkinter.messagebox.showinfo("Error!", "Answer file not found!")

delete = quizEdit("a")
root = Tk()
root.geometry("450x320")
root.title("Remove a text file")

label1 = Label(root, text = "What to remove?")
label1.place(x=70, y = 140)

entry1 = Entry(root)
entry1.place(x = 180, y = 140)

et = entry1.get()

button1 = Button(root, text = "Remove", command=lambda : delete.delFile(et))
button1.place(x=210, y=200)


root.mainloop()

Я пытаюсь сделать так, чтобы метод delFile мог удалить текстовый файл из каталога на основе того, что введено из записи в GUI. Однако, когда я нажимаю кнопку, она просто выводит окно сообщения else else.

delFile - это метод класса с именем quizEdit.

1 Ответ

0 голосов
/ 16 марта 2020

Проблема в том, что вы вызываете .get() примерно через миллисекунду после создания виджета ввода, задолго до того, как пользователь даже увидит виджет ввода.

Как правило, для функций GUI необходимо запрашивать данные в тот момент, когда они им нужны. В вашем случае я бы сделал обратный вызов, специально разработанный для получения значения, а затем вызвал бы вашу функцию.

...
def do_delete():
    num = entry1.get()
    delete.delFile(num)
...
button1 = Button(root, text = "Remove", command=do_delete)
...

Это не единственное решение, но для меня это самое чистое. Вы можете установить команду на lambda, которая вызывает get(), но я считаю, что такой тип шаблона сложнее понять и сложнее отладить. Другим вариантом будет вызов get() внутри delFile, но он тесно связывает пользовательский интерфейс с объектом quizEdit, что может быть или не быть желательным.

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