Итак, я пытаюсь создать программу с 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()
Это мой текущий код, я знаю, что он выглядит большим, но многое из него можно проигнорировать при ответе на этот вопрос.
Что касается работы программы, вы вводите свое имя и попадаете в следующее окно. Там вы можете нажать кнопку отправки и ввести текст, а также запросить подсказку.
Когда вы нажимаете кнопку подсказки, вы получаете текст на экране, а когда вы отправляете правильный ответ, который в данном случае является «тестовым», текст должен исчезнуть. Но это не так. Есть идеи о том, что я делаю неправильно?
Я действительно забыл заменить .forget () на .destroy, я это отредактировал. А что ты имеешь ввиду под отступом?
Слово def
имеет тот же отступ, что и следующая строка. Тело функции должно иметь дополнительный уровень отступа от строки def
.
Ах, я понимаю, что ты имеешь в виду. Я починил это. Но знаете ли вы, почему hintTextLabel.destroy () и hintLabel.destroy () ничего не делают? У меня полностью закончились идеи.
Ваш код у меня отлично работает. Если я передам «уничтожить», то будет уничтожена только что созданная метка, и появится кнопка. Если я не передам «уничтожить», он оставит метку, но уничтожит кнопку.
Это странно, потому что во всем моем коде он не работает должным образом. Может, мне все закачать?
Не все, просто минимальный воспроизводимый пример.
Я не понимаю, как может работать отредактированный код, который вы опубликовали. Кнопка запуска зависит от данных, которые вы ввели, но виджет ввода не виден для ввода чего-либо. Пожалуйста, найдите время, чтобы опубликовать правильный минимальный воспроизводимый пример, который действительно работает и воспроизводит проблему.
Я отредактировал исходный пост, теперь он должен включать минимум моей программы, но при этом показывать, что идет не так. Я забыл поставить entry.pack () внизу.
Ожидаете ли вы, что время второй вызывается eersteHint
, что он уничтожает виджеты из времени первый, когда он был вызван?
Это действительно именно то, что я пытаюсь сделать, но я не могу понять, как это сделать. Я просто понял, что делаю не так, но не знаю, как это сделать правильно ...
Проблема в том, что вы используете локальную переменную, но ожидаете, что эта локальная переменная каким-то образом запомнится при втором вызове функции. Все, что делает ваш код, - это создает метку, а затем немедленно уничтожает тот, который он только что создал. Если вы хотите, чтобы он уничтожил созданный ранее, вам придется сохранить его в глобальной переменной.
Большое спасибо! Теперь я понимаю, что я сделал не так и как это исправить. Мне нужно выяснить, что это значит для всего моего кода, но теперь я знаю, что делал не так. Спасибо, что остались со мной! <3
Отступ кода в вашем вопросе требует исправления. Кроме того, нет места, где вы называете уничтожение. Как вы думаете, почему это должно разрушить лейбл?