Tkinter:窗口无法打开

时间:2015-04-21 10:52:15

标签: python tkinter

我的代码和子函数已执行,但它没有到达mainloop()。 如果我注释掉" update_Lux(labelLuxValue)"窗口出现了。 我无法弄清楚原因:(

from Tkinter import *

def update_Lux(label):
    label.config(text = str(dev.calcLux()))
    label.after(100, update_Lux(label))

def update_CT():
    labelCTValue.config(text = str(dev.calcCT()))
    labelCTValue.after(100, update_CT())

box = Tk()
box.title('TCS3490')
box.geometry('200x180')

labelLux = Label(master=box, text='Lux=')
labelLux.place(x=5, y=5, width=60, height=30)

labelCT = Label(master=box, text='CT=')
labelCT.place(x=5, y=30, width=60, height=30)

labelLuxValue = Label(master=box)
labelLuxValue.place(x=50, y=5, width=100, height=30)

labelCTValue = Label(master=box)
labelCTValue.place(x=50, y=30, width=100, height=30)

update_Lux(labelLuxValue)

box.mainloop()

2 个答案:

答案 0 :(得分:2)

您的两种方法update_Luxupdate_CT中都有无限循环。

这一行

label.after(100, update_Lux(label))

应该是

label.after(100, lambda: update_Lux(label))

label.after(100, update_Lux, label)

否则,您不是将update_Lux函数传递给after,而是传递update_Lux(label)结果 ...并且当调用该方法时,它再次传递尝试将结果传递给after等等。

答案 1 :(得分:1)

好的,效果很好。 我现在有另一个问题。 还有另一个名为“update_CT”的函数。结构是一样的。 两个顺序都不起作用。

包括两个“更新”功能,如:

def update_LuxCT():
    labelLuxValue.config(text = str(dev.calcLux()))
    labelCTValue.config(text = str(dev.calcCT()))
    labelLuxValue.after(100, lambda:update_LuxCT())

虽然有效:)

但为什么他们不能分开工作?