Метка Python Tkinter не разрушается

Итак, я пытаюсь создать программу с tkinter, и до сих пор все пошло так, как я ожидал, и я почти добился того, что хотел. Но у меня проблема с уничтожением этикеток.

from tkinter import *
root = Tk()
root.geometry("500x500")

def controleerAntwoord(gekozenHeld, submit, eersteHintButton):
    antwoord = entry.get()
    if antwoord == gekozenHeld:
        submit.destroy()
        eersteHintButton.destroy()
        eersteHint("destroy", button)
        startspel()


def eersteHint(superheldHint, button):
    hintTextLabel = Label(root, text = "First hint: ")
    hintLabel = Label(root, text = superheldHint)
    if superheldHint != "destroy":
        hintTextLabel.pack()
        hintLabel.pack()
        button.destroy()
    if superheldHint == "destroy":
        hintTextLabel.destroy()
        hintLabel.destroy()

def startspel():
    entry.delete(0, 'end')
    gekozenHeld = "test"
    superheldHint1 = 'hey'
    eersteHintButton = Button(root, text = "Give First Hint", command = lambda: eersteHint(superheldHint1, eersteHintButton))
    submit = Button(root, text = "Submit Answer",foreground = "blue",     command = lambda: controleerAntwoord(gekozenHeld, submit, eersteHintButton))
    eersteHintButton.pack(side = BOTTOM)
    entry.pack(side = BOTTOM)
    submit.pack(side = BOTTOM, pady = 20)



def start_up():
    name = entry.get().strip()
    if name != "":
        button.destroy()
        giveName.destroy()
        startspel()


giveName = Label(root, text = "Insert your name: ")
entry = Entry(root)
button = Button(root, text = "Enter", command=start_up)
entry.pack()
button.pack()

root.mainloop()

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

Что касается работы программы, вы вводите свое имя и попадаете в следующее окно. Там вы можете нажать кнопку отправки и ввести текст, а также запросить подсказку.

Когда вы нажимаете кнопку подсказки, вы получаете текст на экране, а когда вы отправляете правильный ответ, который в данном случае является «тестовым», текст должен исчезнуть. Но это не так. Есть идеи о том, что я делаю неправильно?

Отступ кода в вашем вопросе требует исправления. Кроме того, нет места, где вы называете уничтожение. Как вы думаете, почему это должно разрушить лейбл?

Bryan Oakley 27.10.2018 13:23

Я действительно забыл заменить .forget () на .destroy, я это отредактировал. А что ты имеешь ввиду под отступом?

Bruus 27.10.2018 13:27

Слово def имеет тот же отступ, что и следующая строка. Тело функции должно иметь дополнительный уровень отступа от строки def.

Bryan Oakley 27.10.2018 13:30

Ах, я понимаю, что ты имеешь в виду. Я починил это. Но знаете ли вы, почему hintTextLabel.destroy () и hintLabel.destroy () ничего не делают? У меня полностью закончились идеи.

Bruus 27.10.2018 13:32

Ваш код у меня отлично работает. Если я передам «уничтожить», то будет уничтожена только что созданная метка, и появится кнопка. Если я не передам «уничтожить», он оставит метку, но уничтожит кнопку.

Bryan Oakley 27.10.2018 13:36

Это странно, потому что во всем моем коде он не работает должным образом. Может, мне все закачать?

Bruus 27.10.2018 13:42

Не все, просто минимальный воспроизводимый пример.

Stop harming Monica 27.10.2018 13:59

Я не понимаю, как может работать отредактированный код, который вы опубликовали. Кнопка запуска зависит от данных, которые вы ввели, но виджет ввода не виден для ввода чего-либо. Пожалуйста, найдите время, чтобы опубликовать правильный минимальный воспроизводимый пример, который действительно работает и воспроизводит проблему.

Bryan Oakley 27.10.2018 14:17

Я отредактировал исходный пост, теперь он должен включать минимум моей программы, но при этом показывать, что идет не так. Я забыл поставить entry.pack () внизу.

Bruus 27.10.2018 14:17

Ожидаете ли вы, что время второй вызывается eersteHint, что он уничтожает виджеты из времени первый, когда он был вызван?

Bryan Oakley 27.10.2018 14:23

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

Bruus 27.10.2018 14:26
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
11
238
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Большое спасибо! Теперь я понимаю, что я сделал не так и как это исправить. Мне нужно выяснить, что это значит для всего моего кода, но теперь я знаю, что делал не так. Спасибо, что остались со мной! <3

Bruus 27.10.2018 14:40

Другие вопросы по теме