tkinter with after循环不会更新if语句中的var



我有一个日程安排函数,需要检查它是否是今天(),然后将邮件发送给收件人。它需要工作,所以,用户输入开始日期,然后他需要输入时间差。

当达到时间间隔时,自动发送电子邮件。如果我使用while循环,它工作得很好,电子邮件正在发送,时间增量与给定的日期再次更新。但是,,,,你可能知道while循环和mainloop在tkinter中工作不好。

我现在使用后循环,在2000ms后调用函数。现在我遇到了一个问题,即在timedelta到达后,电子邮件将发送,但timedelta不随给定时间更新,并且无限发送接收者的整个列表(他需要发送其中2个)和几天后再次发送。

cal = DateEntry(master, selectmode = 'day',
cursor='hand1', date_pattern="yyyy-m-d")
cal.place(x =140,y=20)
#timedelta entri 
date_count_field= Entry(master, width=5)
date_count_field.place(y=20,x=335)
#get & set the begin date
starts = cal.get_date()
cal.set_date(starts)

def starter():
CleaningSchedule()
master.after(2000, starter)
def CleaningSchedule():
starts = cal.get_date()
global emails , selector
# master.withdraw()
now = date.today()
days_calc = int(date_count_field.get())
target = starts + timedelta(days=days_calc)
print('Vandaag is het: ',now, 'Volgende ronde is: ', target)
if target == now:
starts += timedelta(days=days_calc)
target += timedelta(days=days_calc)
receiver_email = next(selector), next(selector)
print(receiver_email)
Button(master, text = "Start",
command =lambda:[starter()], width=10).place(x=410,y = 650)

每次调用CleaningSchedule()时,将starts重置为cal.get_date()。您应该只在开始时初始化它一次,然后更新函数中的全局变量。

def CleaningSchedule():
global starts
# master.withdraw()
now = date.today()
days_calc = int(date_count_field.get())
target = starts + timedelta(days=days_calc)
print('Vandaag is het: ',now, 'Volgende ronde is: ', target)
if target == now:
starts += timedelta(days=days_calc)
target += timedelta(days=days_calc)
receiver_email = next(selector), next(selector)
print(receiver_email)

不需要global email, selector,因为您从未在函数中分配这些变量(您甚至根本不使用email)。

相关内容

  • 没有找到相关文章

最新更新