做个课程表吧(二)
文章目錄
- 確認當前時間
- 初始化時間
- 計算當前周數
- 繪制當前周
- 判斷是否是當前周的課程
- 放置文本控件
- 全部代碼
我們想要根據當前第幾周顯示課程表。
確認當前時間
初始化時間
首先我們要確認一個學期的開始。我們設置一個日期。如果這個日期是星期天那么他就是一個學期的開始,如果不是,那么就變更這一天到最近的周日。
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"])輸出結果為
可以看到,有的課程分單雙周,所以要分別加以判斷。
具體做法是,
以上判斷都成立后就可以放置文本控件了。
放置文本控件
首先我們輸出一下保存節數的字符串。
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) + 1class_js = '''[數據]''' js = json.loads(class_js) # 轉化為jsonweekday = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"] 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() # 進入消息循環總結