2011-04-19 53 views
0

我写了一个基于命令的程序,它正常工作。由于我想添加一些图形界面,我用Tkinter准备了一个简单的界面。但包含“scheduler.run”的行,它锁定我的应用程序,我无法获得任何错误代码。在Tkinter的特定时间打印值

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的建议?

回答

0

Tkinter是单线程的。看起来你的调度程序睡眠了,直到它运行一些东西,所以当它正在睡觉时,你的GUI将被锁定。

未来或按照Tkinter的时间表运行某些东西的正确方法是致电after,它使用事件循环安排某些事情在一段时间后运行。你可以调用一次,如果你想要一些毫秒后运行一段时间,或者你可以重复调用它,直到某种条件。通过重复,我的意思是你使用after来调用一个函数来检查条件;如果条件为假,该函数将以after再次自行调用。如果条件是真的,它会运行你的工作。

+0

布赖恩,感谢您的信息。但是有可能将scheduler.run与其他GUI一起使用,例如wxpython?或“使用后”的任何简单示例?对不起,但我对Tkinter和其他GUI很新。 – fish 2011-04-19 12:10:48

+0

@fish:看到这个答案的例子使用后:http://stackoverflow.com/questions/2400262/code-a-timer-in-a-python-gui-in-tkinter – 2011-04-19 12:33:06