tkinter GUI持续检查系统时间和呼叫功能

时间:2017-12-11 18:03:22

标签: python tkinter while-loop

我在Python 2.7中开发了我的GUI应用程序。应用程序将从用户获取开始时间,结束时间和时间间隔。我有代码将接受此输入并根据间隔创建时间数组。 我试图在这里实现一个函数,它将在存储在数组中的时间被调用,如果用户按下停止按钮也可以停止。

time_slots = [dt.strftime('%H:%M:%S') for dt in
    datetime_range(start_time, 
    end_time,timedelta(minutes=interval))]

time_slots_array = np.array(time_slots)

def function1():
    print("In function 1")

def start():
    global start_time,end_time,time_slots

    now_time = datetime.now().time()
    t.sleep(1)
    keys = sorted(time_slots_arrary
    if now_time >= start_time.time() and now_time <= end_time.time():
       if now.strftime("%H:%M:%S") in keys:
          function1()
       job1 = root.after(1000, start())

    else:
     root.after_cancel(job1)

start_button = tk.Button(prod_frame, text='Start Program ', width=25, background='green', foreground='black',command = start)

stop_button = tk.Button(prod_frame, text='Stop Program ', width=25, background='orange', foreground='black',command = stop)`

1 个答案:

答案 0 :(得分:1)

您正在调用after错误。它需要可调用 - 对函数的引用。

考虑这行代码:

job1 = root.after(1000, start())

以上代码的功能与此相同:

result = start()
job1 = root.after(1000, result)

由于start()返回None,所以它与此相同:

start()
job1 = root.after(1000, None)

调用after的正确方法是向函数提供引用

job1 = root.after(1000, start)