Печать значений в определенное время с Tkinter - PullRequest
0 голосов
/ 19 апреля 2011

Я написал программу на основе команд, и она работает правильно.Поскольку я хотел бы добавить графический интерфейс, я подготовил простой с Tkinter.Но строка, которая содержит «scheduler.run», блокирует мое приложение, и я не могу получить код ошибки.

def do_deneme(p):
    etiket_run1["text"] = etiket_run1["text"] + str(p) + " completed at " + str(datetime.datetime.now())

def run_do():
    ...
    scheduler=sched.scheduler(time.time, time.sleep)
    for p in clean_information:
        scheduler.enter(float(p[12]), 1, do_deneme,(p,))
    etiket_run1["text"] = etiket_run1["text"] + str(datetime.datetime.now())
    scheduler.run()
    etiket_run1["text"] = etiket_run1["text"] + "Completed."

...
etiket_run1=Label(cerceve1, fg="red")
etiket_run1.pack(side=BOTTOM,padx=5,pady=5)
dugme = Button(cerceve2,text=u"Start",command=run_do)
...

Есть ли способ отладки этой части кода?или есть предложения по использованию scheduler.run с метками в Tkinter?

1 Ответ

0 голосов
/ 19 апреля 2011

Tkinter однопоточный.Похоже, что ваш планировщик спит, пока не настало время что-то запустить, поэтому, пока он спит, ваш графический интерфейс будет заблокирован.

Правильный способ запустить что-либо в будущем или по расписанию с помощью Tkinter - это вызвать after, который использует цикл обработки событий, чтобы запланировать выполнение чего-либо через определенное время.Вы можете либо вызвать его один раз, если хотите, чтобы что-то запускалось через фиксированное количество миллисекунд, либо вы можете повторно вызывать его до некоторого условия.Повторяя, я имею в виду, что вы используете after для вызова функции, которая проверяет условие;если условие ложно, функция вызовет себя снова с after.Если условие выполнено, выполняется ваша работа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...