Обновлено: Я понимаю, что этот вопрос был двусмысленным и неправильно заданным, поэтому я попытался упростить.
У меня возникли проблемы при попытке использовать приложение tkinter для выполнения нескольких циклов из-за неправильного уничтожения окна. Мое исправление (которое, я уверен, неверно) заключалось в создании целочисленного цикла и вложении моего класса в него:
for i in range(1, 1000):
if i >= 2:
root.destroy()
class App(tkinter.Frame): *app code here*
чтобы выйти из приложения:
def OnButtonClick2(self):
i = -1
app.destroy()
root.destroy()
sys.exit()
в противном случае:
i+=1
По какой-то причине, если я проинструктировал приложение уничтожить после первой итерации, оно оставило бы пустое корневое окно, а затем при повторном создании приложения кнопки были бы неактивными и вложенными в другое окно. Это избавило от проблемы, но я знаю, что это неправильное решение.
Расширяя ответ @ Blckknght, вы, по сути, пытаетесь перезапустить приложение tkinter. То, что на самом деле делает приложение, не имеет отношения к вопросу. Вы можете оставить только самый минимум, приложение "hello world", попробовать перезапустить его и рассказать нам о своих усилиях. Тогда мы сможем указать вам правильное направление. Я надеюсь, что вы не ожидаете, что кто-то из нас добровольно прочитает 156 строк кода и отладит ваше приложение за вас.
@ roeen30 Я точно не знаю, и спасибо за вклад. Я пытался поставить функцию вызов перед в этом, но не думаю, что писал ее правильно. Я плохо разбираюсь в терминологии и все еще новичок, поэтому не знаю, как объяснить, что еще я пробовал. Я также просто попытался напрямую сослаться на экземпляр после mail.Display (True), чтобы, когда окно электронной почты исчезло, оно продолжалось. Это тоже не сработало. Просмотрите мои правки и дайте мне знать, если это более приемлемо.
@Blckknght спасибо за вклад. См. Правки.
Это лучше, но я все еще недостаточно понимаю, что происходит. Где второй образец кода подходит для приложения tkinter? Кроме того, опубликуйте, пожалуйста, код всего, что вы пробовали до сих пор.
@ roeen30 Я удалил 2-й образец, так как он был бесполезен. Я опубликовал то, что пробовал, для кода, который помню. Я также попытался сделать все это функцией (я уверен, что это совершенно неправильно), а затем вызвать функцию, и это не сработало.
Почему неправильно делать все это функцией? Это было то, что я собирался предложить
@ roeen30 Я имею в виду, что на самом деле я недостаточно знаю, чтобы сказать, что это неправильно. Полагаю, я просто не знаю, как вложить класс в функцию.
Я могу придумать два варианта. Либо организуйте логику, которую вы хотите повторить, как метод класса, либо поместите все в if __name__ == '__main__' в функцию. Будь то метод или функция, вызывайте их в цикле. Нет необходимости помещать само определение класса в функцию.
@ roeen30 спасибо, я попробую и расскажу, как дела.
Публикация как ответ






Либо организуйте логику, которую вы хотите повторить, как метод класса, либо поместите все в if __name__ == '__main__' в функцию. Будь то метод или функция, вызывайте их в цикле.
Я не голосующий против, но я точно могу понять, почему кто-то проголосует против. Вы не совсем объяснили, в чем заключается ваша проблема, и где в вашем коде она живет. Вы показали много кода (что, безусловно, лучше, чем полное отсутствие кода, но не так хорошо, как меньшее количество). Пожалуйста, попробуйте уменьшить его до минимальный воспроизводимый пример, то есть наименьшего количества кода, который может продемонстрировать проблему. И объясните, в чем заключается проблема, чтобы мы могли иметь некоторое представление о том, что вы пытаетесь сделать и как у вас возникают проблемы, еще до того, как мы начнем читать код!