我编写了一个基于命令的程序,它运行正常。由于我想添加一些图形界面,我准备了一个简单的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的建议吗?
答案 0 :(得分:0)
Tkinter是单线程的。看起来您的调度程序会一直处于睡眠状态,直到它处于休眠状态时,您的GUI将会锁定。
使用Tkinter在未来或按计划运行某些东西的正确方法是调用after
,它使用事件循环来安排在一段时间后运行的东西。如果您希望稍后运行固定的毫秒数,您可以调用一次,或者您可以重复调用它直到某些条件。重复一遍,我的意思是你使用after
来调用一个检查条件的函数;如果条件为假,则函数将使用after
再次调用自身。如果条件为真,那就是你的工作。