Python 索引错误,倒计时日历不工作
你能帮我写代码吗 我想要一个if-else语句,如果没有给出节日的描述,它会显示没有关于特定节日的信息。如果不是这样的话,我将不得不执行Python 索引错误,倒计时日历不工作,python,tkinter,Python,Tkinter,你能帮我写代码吗 我想要一个if-else语句,如果没有给出节日的描述,它会显示没有关于特定节日的信息。如果不是这样的话,我将不得不执行(事件[2]),但对于这一点,它显示了 Traceback (most recent call last): File "C:\Users\kanav_i4cko4c\Downloads\My first tkinter program.py", line 52, in <module> if (event[2]):
(事件[2])
,但对于这一点,它显示了
Traceback (most recent call last):
File "C:\Users\kanav_i4cko4c\Downloads\My first tkinter program.py", line 52, in <module>
if (event[2]):
IndexError: list index out of range
这是主程序的源代码
from tkinter import Tk, Canvas, simpledialog, messagebox
from datetime import date, datetime
# function get_events is to get the celebration events
def get_events():
list_events = []
with open('festivals.txt') as file:
for line in file:
line1 = line.rstrip('\n')
global current_event
current_event = line1.split(',')
print('Check 0')
print(current_event)
current_event[1] = datetime.strptime(current_event[1], '%d/%m/%y').date()
list_events.append(current_event)
return list_events
def days_between_dates(date1, date2):
time_between = str(date1 - date2)
number_of_days = time_between.split(' ')
return number_of_days[0]
# End of Functions
# -----------------------------------------------------------------------------------------------
# Main program starts here
root = Tk()
root.title('Calendar')
c = Canvas(root, width=2000, height=800, bg='dark blue')
c.pack()
c.create_text(100, 50, anchor='w', fill='white', font=' Times 40 bold underline',
text='My Countdown Calendar')
c.create_rectangle(30, 10, 60, 1000,
outline="#fb0", fill="#fb0")
events = get_events()
today = date.today()
# Make a dictionary for the festivals
vertical_space = 100
events.sort(key=lambda x: x[1])
horizontal_space = 100
for event in events:
event_name = event[0]
days_until = days_between_dates(event[1], today)
if (event[2]):
display = 'It is %s days until %s. %s = %s' % (days_until, event_name, event_name,event[2])
else:
display = 'It is %s days until %s. There is no info on %s' % (days_until, event_name, event_name)
if (int(days_until) <= 50):
text_col = '#c11a2b'
else:
text_col = 'SkyBlue1'
c.create_text(100, vertical_space, anchor='w', fill=text_col,
font='Calibri 28 bold', text=display)
vertical_space = vertical_space + 30
horizontal_space = horizontal_space + 40
从tkinter导入Tk、Canvas、simpledialog、messagebox
从日期时间导入日期,日期时间
#get_events的功能是获取庆祝活动
def get_事件():
列出事件=[]
打开('festival.txt')作为文件:
对于文件中的行:
line1=line.rstrip('\n')
全球当前事件
当前_事件=line1.split(',')
打印('检查0')
打印(当前事件)
当前_事件[1]=datetime.strtime(当前_事件[1],“%d/%m/%y”).date()
列出\u事件。追加(当前\u事件)
返回列表\u事件
定义日期之间的天数(日期1、日期2):
时间间隔=str(日期1-日期2)
天数=分割之间的时间(“”)
返回天数为天[0]
#功能结束
# -----------------------------------------------------------------------------------------------
#主程序从这里开始
root=Tk()
root.title('日历')
c=画布(根,宽=2000,高=800,背景为深蓝色)
c、 包()
c、 创建文本(100,50,锚定为w',填充为白色,字体为“乘以40粗体下划线”,
text='My Countdown Calendar')
c、 创建矩形(30、10、60、1000、,
大纲=“#fb0”,填充=“#fb0”)
事件=获取事件()
今天=日期。今天()
#为节日编一本字典
垂直空间=100
events.sort(key=lambda x:x[1])
水平空间=100
对于事件中的事件:
事件名称=事件[0]
截止日期=日期之间的日期(事件[1],今天)
如果(事件[2]):
显示='距离%s还有%s天。%s=%s%%(截止日期、事件名称、事件名称、事件[2])
其他:
display='距离%s还有%s天。%s“%”(截止日期、事件名称、事件名称)上没有任何信息
当您计算事件[2]
时,如果(int(days_-until),它会尝试检索列表中不存在的第三项,因此python会引发异常
一种解决方案是使用默认值初始化列表:
event = [None for i in range(3)]
这样,在事件[2]
处有一个None
值,可以通过if语句对其进行计算
另一种解决方案可以是简单地检查列表是否包含少于3项:
if len(event) <= 2:
# do something
if len(event)event=[None for i in range(3)]
也可以写成event=[None]*3
@ILoveHistory不客气!如果我能帮助你,请标记为已解决=]
if len(event) <= 2:
# do something