2016-09-16 1 views
0

Я понимаю, что существует много examples того, как правильно закрыть графический интерфейс Tkinter, вызвав функцию root.destroy(). Они работают с моей настройкой, но я решил, что включение переменной типа tkinter.intvar заставляет процесс gui жить даже после закрытия окна. Вот рабочий пример:Tkinter intvar вызывает процесс для жизни на

import mtTkinter as Tkinter #special threadsafe version of Tkinter module, required for message windows. You can use regular Tkinter if needed 

root = Tkinter.Tk() 
root.wm_title("KillmePlz") 

nexusvar = Tkinter.IntVar() 

def ClosebyX(): 
    root.destroy() 

closebutton = Tkinter.Button(root,text='Quit',command=ClosebyX) 
closebutton.pack() 
root.protocol('WM_DELETE_WINDOW', ClosebyX) 
root.mainloop() 

На моей машине, если я удалю создание «nexusvar», в Tkinter.IntVar, когда я закрываю GUI процесс также останавливается. Если эта переменная включена, как показано выше, я вижу, что процесс задерживается после закрытия gui. Я не думаю, что mtTkinter имеет значение.

Кто-нибудь знает, почему это может произойти?

для Windows 7 64 бит, Python 2.7.12

ОБНОВЛЕНИЕ 9/20/16: mtTkinter является источником этой проблемы. Ниже приведено решение для регулярного использования модуля Tkinter. Для решения этой задачи с помощью mtTkinter увидеть следующее post

ответ

1

nexusvar не ребенок root, поэтому, когда вы уничтожите root он не знает, чтобы уничтожить nexusvar, а также - две вещи отдельно. Вы можете установить IntVar, чтобы иметь root в качестве родителя, предоставив root конструктору. nexusvar должен тогда умереть, когда root умирает.

+0

Я пробовал nexusvar = Tkinter.IntVar (master = root), и я все еще наблюдаю ту же проблему. Это то, что вы имели в виду, когда говорите, чтобы сделать корень родителем? – willpower2727

+0

Я могу подтвердить, что проблема сохраняется в оболочке IDLE или из исполняемого файла (py2exe) – willpower2727

+0

По-моему, мое использование модуля mtTkinter является виновником. Когда я применяю ваше решение с обычным модулем Tkinter, проблем нет. mtTkinter необходимо решить эту проблему – willpower2727