使用Tkinter在特定时间打印值

时间:2011-04-19 10:24:24

标签: python tkinter

我编写了一个基于命令的程序,它运行正常。由于我想添加一些图形界面,我准备了一个简单的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)
...

任何调试此代码部分的方法?或者有任何关于在Tkinter中使用带有标签的scheduler.run的建议吗?

1 个答案:

答案 0 :(得分:0)

Tkinter是单线程的。看起来您的调度程序会一直处于睡眠状态,直到它处于休眠状态时,您的GUI将会锁定。

使用Tkinter在未来或按计划运行某些东西的正确方法是调用after,它使用事件循环来安排在一段时间后运行的东西。如果您希望稍后运行固定的毫秒数,您可以调用一次,或者您可以重复调用它直到某些条件。重复一遍,我的意思是你使用after来调用一个检查条件的函数;如果条件为假,则函数将使用after再次调用自身。如果条件为真,那就是你的工作。