Не удается удалить корневое окно tkinter

Обновлено: Я понимаю, что этот вопрос был двусмысленным и неправильно заданным, поэтому я попытался упростить.

У меня возникли проблемы при попытке использовать приложение 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 17.11.2018 01:07

Расширяя ответ @ Blckknght, вы, по сути, пытаетесь перезапустить приложение tkinter. То, что на самом деле делает приложение, не имеет отношения к вопросу. Вы можете оставить только самый минимум, приложение "hello world", попробовать перезапустить его и рассказать нам о своих усилиях. Тогда мы сможем указать вам правильное направление. Я надеюсь, что вы не ожидаете, что кто-то из нас добровольно прочитает 156 строк кода и отладит ваше приложение за вас.

roeen30 17.11.2018 01:11

@ roeen30 Я точно не знаю, и спасибо за вклад. Я пытался поставить функцию вызов перед в этом, но не думаю, что писал ее правильно. Я плохо разбираюсь в терминологии и все еще новичок, поэтому не знаю, как объяснить, что еще я пробовал. Я также просто попытался напрямую сослаться на экземпляр после mail.Display (True), чтобы, когда окно электронной почты исчезло, оно продолжалось. Это тоже не сработало. Просмотрите мои правки и дайте мне знать, если это более приемлемо.

visualnotsobasic 17.11.2018 01:18

@Blckknght спасибо за вклад. См. Правки.

visualnotsobasic 17.11.2018 01:19

Это лучше, но я все еще недостаточно понимаю, что происходит. Где второй образец кода подходит для приложения tkinter? Кроме того, опубликуйте, пожалуйста, код всего, что вы пробовали до сих пор.

roeen30 17.11.2018 01:26

@ roeen30 Я удалил 2-й образец, так как он был бесполезен. Я опубликовал то, что пробовал, для кода, который помню. Я также попытался сделать все это функцией (я уверен, что это совершенно неправильно), а затем вызвать функцию, и это не сработало.

visualnotsobasic 17.11.2018 01:36

Почему неправильно делать все это функцией? Это было то, что я собирался предложить

roeen30 17.11.2018 14:49

@ roeen30 Я имею в виду, что на самом деле я недостаточно знаю, чтобы сказать, что это неправильно. Полагаю, я просто не знаю, как вложить класс в функцию.

visualnotsobasic 17.11.2018 18:33

Я могу придумать два варианта. Либо организуйте логику, которую вы хотите повторить, как метод класса, либо поместите все в if __name__ == '__main__' в функцию. Будь то метод или функция, вызывайте их в цикле. Нет необходимости помещать само определение класса в функцию.

roeen30 17.11.2018 18:51

@ roeen30 спасибо, я попробую и расскажу, как дела.

visualnotsobasic 17.11.2018 22:03

Публикация как ответ

roeen30 17.11.2018 22:14
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
11
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Либо организуйте логику, которую вы хотите повторить, как метод класса, либо поместите все в if __name__ == '__main__' в функцию. Будь то метод или функция, вызывайте их в цикле.

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