2014-10-02 2 views
1

Как решить эту проблему? Я запускаю этот код, окно создается, но в консоли появляется сообщение об ошибке. Я думаю, проблема в том, что цикл «после» не заканчивается, но окно уже уничтожено.Недопустимое имя команды во время выполнения (сценарий «после»)

Код:

import Tkinter as tk 
import time 

class App(): 
    def __init__(self): 
     self.root = tk.Tk() 
     self.label = tk.Label(text="") 
     self.label.pack() 
     self.update_clock() 
     self.root.mainloop() 

    def update_clock(self): 
     now = time.strftime("%H:%M:%S") 
     self.label.configure(text=now) 
     self.root.after(1000, self.update_clock) 

app=App() 

сообщения в консоли:

invalid command name "66120320callit" 
while executing 
"66120320callit" 
("after" script) 

Извините за мою маленькую информацию в первом посте. Я использую IDE Spyder, и ошибки отображаются в консоли spyder, где многократно повторяется мой код. Описание этих ошибок, которые я обнаружил в трекере ошибок python, так как «wait_variable зависает при выходе»

+1

Это странно. Он работает на моей машине. (как только я исправляю отступы на строках после 'def __init__') – Kevin

+1

работает и на меня! – user3885927

ответ

2

Если вы уничтожите окно, все запланированные задания «после» могут быть запущены. Если окно уничтожено, и это задание взаимодействует с виджемом, который был удален, вы получите эту ошибку.

Вы можете поместить try вокруг кода и проигнорировать такую ​​ошибку, проверить, существует ли это окно перед тем, как пытаться его настроить, или поместить обработчик для того, когда основное окно будет уничтожено, чтобы удалить любые ожидающие «после» задания ,

+1

Если у вас есть кнопка выхода вручную, вы можете использовать метод 'after_cancel()', чтобы отменить метод 'after' перед вызовом' root.destroy() ', чтобы убить вашу программу. Документация здесь: http://effbot.org/tkinterbook/widget.htm –

-1

У меня была эта проблема, потому что мой модуль был назван «setup», и у меня также был файл setup.py. При вызове setup.py somecommand вы получите «недопустимое имя команды« somecommand »».

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