2015-09-17 3 views
0

Предоставление я создаю окно Tkinter с помощью root = Tk() в функцию и выйти из функции, как я могу закрыть окно? Я отправлю пример.Python Tkinter: Закройте окно, открытое функцией, которая больше не работает

def example(): 
    root = Tk() 
    root.update() 

print 'opening window' 
example() 
print 'closing window' 
#close window opened by example()? 

Мне очень понравилось бы, если бы был способ закрыть все открытые окна Tkinter.

+0

'root' - это локальная переменная в' example', и нет доступа к ней, если вы ее не вернете. Когда вы хотите уничтожить окно, просто вызовите 'destroy' в ссылку, возвращаемую' example'. В любом случае, вы должны называть 'mainloop' на root ... – nbro

+0

Правильно, спасибо. Кроме того, я не хочу называть mainloop, потому что я хочу, чтобы программа продолжала работать, корень просто дает дополнительную информацию. Если я позвоню mainloop, программа не сможет продолжать работать, пока окно открыто. – ZeroFunter

ответ

1

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

def example(): 
    root = Tk() 
    root.update() 
    return root 

print 'opening window' 
window = example() 
print 'closing window' 
window.destroy() 

В конце вашего вопроса вы написали «Я бы очень нравится, если бы был способ, чтобы закрыть все открытые окна Tkinter.» Поскольку tkinter предназначен только для открытия только одного окна root, это не должно быть проблемой. Просто отслеживайте одно созданное окно root. Когда вы уничтожаете его, все детские окна также будут уничтожены.

+0

Возможно, OP также ссылается на окна верхнего уровня ... – nbro

+0

@Axl: может быть, хотя в примере показано только корневое окно, и это все, что нам нужно. –

+0

Это работало очень хорошо. Спасибо. Кроме того, я не обращался к дополнительным окнам. Кстати, я ничего не понял. Вы говорите, что Tkinter предназначен только для открытия одного окна root. Если я делаю 'root = Tk()', 'root.update()', 'rootB = Tk()' и 'rootB.update()', не означает ли это, что у меня было бы два открытых окна? – ZeroFunter

Смежные вопросы