首先我们要确认一个学期的开始。我们设置一个日期。如果这个日期是星期天那么他就是一个学期的开始,如果不是,那么就变更这一天到最近的周日。
import datetime
# 确认开始的日期 年/月/日
init_year = 2020
init_mouth = 2
init_day = 20
# 如果开始的一天不是周日,则将开始的日期变为周日
if not datetime.datetime(init_year, init_mouth, init_day).strftime("%w") == 0:
init_day -= eval(datetime.datetime(init_year, init_mouth, init_day).strftime("%w"))
计算当前日期于初始化时间直接差了多少天,然后除以7取余。结果从一开始,在weeks上面加个1.
# 初始化的时间
init_date = datetime.datetime(init_year, init_mouth, init_day)
# 现在的时间
now_date = datetime.datetime.today()
# 间隔的天数
days = (now_date - init_date).days
# 间隔的周数,第一周为1
weeks = int(days / 7) + 1
首先我们打印下保存周数据的字符串
print(course["zcd"])
输出结果为
可以看到,有的课程分单双周,所以要分别加以判断。
具体做法是,
week = course["zcd"]
# 判断课程是否是单双周的课程
if "单" in week:
week = week.replace("周(单)", "")
week = week.split("-")
# 开始周/结束周
start_week, end_week = eval(week[0]), eval(week[-1])
if weeks % 2 == 1: # 判断是否是单周
if start_week <= weeks <= end_week: # 判断该课程是否是当前周的课程
if start_week <= weeks <= end_week: # 判断该课程是否是当前周的课程
[放置文本控件]
elif "双" in week:
week = week.replace("周(双)", "")
week = week.split("-")
# 开始周/结束周
start_week, end_week = eval(week[0]), eval(week[-1])
if weeks % 2 == 0: # 判断是否是双周
if start_week <= weeks <= end_week: # 判断该课程是否是当前周的课程
if start_week <= weeks <= end_week: # 判断该课程是否是当前周的课程
[放置文本控件]
else:
week = week.replace("周", "")
week = week.split("-")
# 开始周/结束周
start_week, end_week = eval(week[0]), eval(week[-1])
if start_week <= weeks <= end_week: # 判断该课程是否是当前周的课程
[放置文本控件]
以上判断都成立后就可以放置文本控件了。
首先我们输出一下保存节数的字符串。
print(course["jcor"])
输出结果为
那么我们就首先根据“-”把文本分隔开,然后取第一个和最后一个的数据,第一个数据确认了这节课所处的位置的y轴(一天的课不可能重叠),然后用星期来确认x轴
# 根据节来优化显示效果
part = course["jcor"]
part = part.split("-")
start_part, end_part = eval(part[0]), eval(part[-1])
# 确认文本的位置
x = weekday.index(course["xqjmc"])
text = Text(top, width=30, height=3 * (end_part - start_part + 1)) # 创建一个文本控件
text.place(x=x * 215 + 10, y=start_part * 40 + 20) # 在屏幕上放置文本控件
text.insert(INSERT, scr) # 在控件上放置文本
最后进入消息循环。
top.mainloop() # 进入消息循环
最后的结果为
# -*- coding:GBK -*- # 文件编码
import datetime
import json
from tkinter import *
# 确认开始的日期 年/月/日
init_year = 2020
init_mouth = 2
init_day = 20
# 如果开始的一天不是周日,则将开始的日期变为周日
if not datetime.datetime(init_year, init_mouth, init_day).strftime("%w") == 0:
init_day -= eval(datetime.datetime(init_year, init_mouth, init_day).strftime("%w"))
# 初始化的时间
init_date = datetime.datetime(init_year, init_mouth, init_day)
# 现在的时间
now_date = datetime.datetime.today()
# 间隔的天数
days = (now_date - init_date).days
# 间隔的周数,第一周为1
weeks = int(days / 7) + 1
class_js = '''[数据]'''
js = json.loads(class_js) # 转化为json
weekday = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
y = {}
top = Tk() # 创建一个窗体
top.geometry("1100x600+200+50") # 改变窗体的大小
for course in js["kbList"]:
scr = "课程名:\n{}\n讲师:{}\n周:{}\n节:{}".format(
course["kcmc"], course["xm"], course["zcd"], course["jcor"])
week = course["zcd"]
# 判断课程是否是单双周的课程
if "单" in week:
week = week.replace("周(单)", "")
week = week.split("-")
# 开始周/结束周
start_week, end_week = eval(week[0]), eval(week[-1])
if weeks % 2 == 1: # 判断是否是单周
if start_week <= weeks <= end_week: # 判断该课程是否是当前周的课程
if start_week <= weeks <= end_week: # 判断该课程是否是当前周的课程
# 根据节来优化显示效果
part = course["jcor"]
part = part.split("-")
start_part, end_part = eval(part[0]), eval(part[-1])
# 确认文本的位置
x = weekday.index(course["xqjmc"])
text = Text(top, width=30, height=3 * (end_part - start_part + 1)) # 创建一个文本控件
text.place(x=x * 215 + 10, y=start_part * 40 + 20) # 在屏幕上放置文本控件
text.insert(INSERT, scr) # 在控件上放置文本
elif "双" in week:
week = week.replace("周(双)", "")
week = week.split("-")
# 开始周/结束周
start_week, end_week = eval(week[0]), eval(week[-1])
if weeks % 2 == 0: # 判断是否是双周
if start_week <= weeks <= end_week: # 判断该课程是否是当前周的课程
if start_week <= weeks <= end_week: # 判断该课程是否是当前周的课程
# 根据节来优化显示效果
part = course["jcor"]
part = part.split("-")
start_part, end_part = eval(part[0]), eval(part[-1])
# 确认文本的位置
x = weekday.index(course["xqjmc"])
text = Text(top, width=30, height=3 * (end_part - start_part + 1)) # 创建一个文本控件
text.place(x=x * 215 + 10, y=start_part * 40 + 20) # 在屏幕上放置文本控件
text.insert(INSERT, scr) # 在控件上放置文本
else:
week = week.replace("周", "")
week = week.split("-")
# 开始周/结束周
start_week, end_week = eval(week[0]), eval(week[-1])
if start_week <= weeks <= end_week: # 判断该课程是否是当前周的课程
# 根据节来优化显示效果
part = course["jcor"]
part = part.split("-")
start_part, end_part = eval(part[0]), eval(part[-1])
# 确认文本的位置
x = weekday.index(course["xqjmc"])
text = Text(top, width=30, height=3*(end_part - start_part +1)) # 创建一个文本控件
text.place(x=x * 215 + 10, y=start_part * 40 + 20) # 在屏幕上放置文本控件
text.insert(INSERT, scr) # 在控件上放置文本
top.mainloop() # 进入消息循环