做个课程表吧(一)
手機端的課程表種類繁多,但電腦端的課程表種類卻很少,也不支持自動導課。既然這樣就讓我們來造個課程表吧。
文章目錄
- 獲取課程表
- 制作課程表
- 讀取JSON數據
- 獲取課程
- 格式化課程表
- 創建窗體
- 顯示課程
- 全部代碼
獲取課程表
首先我們先去獲取課程表。登錄教務,點擊 學生課表查詢,進入課表界面,按F12,導航到 Network,按下 ctrl+ r刷新界面,界面更新后,下面出現了幾個文件,讓我們一個個查看。
接下來點擊 Preview,當我們找到第三個的時候我們可以發現里面包含了課程名、時間等,正好是我們需要的內容。
接下來我們用復制這個JSON
制作課程表
讀取JSON數據
接下來我們使用python來制作課程表
首先導入json包,然后導入剛才粘貼的數據,然后把它打印出來
# -*- coding:GBK -*- # 文件編碼 import jsonclass_js = '''[復制剛才的粘貼內容在這里]''' js = json.loads(class_js) # 轉化為json print(js)輸出結果是這樣的:
是我們要的數據
獲取課程
我們可以看到課程數據保存在kbList這個值里,我們只用把這個值下面的數據全部取出來。
他的鍵值對是這樣的
| kcmc | 課程名 |
| xm | 講師 |
| zcd | 節數 |
| jcor | 周數 |
| xqjmc | 星期 |
| cdmc | 地點 |
接下來我們把需要的數據輸出一下
for course in js["kbList"]:scr = "課程名:\n{}\n講師:{}\n節:{}\n周:{}".format(course["kcmc"], course["xm"], course["zcd"], course["jcor"])print(scr)打印的結果是這樣的:
格式化課程表
這樣我們就完成了課程表的制作,但這是不完善的。
比如豎著一排看起來很麻煩,而且找課程也不方便,接下來我們來給課程表添加一個界面。
我們挑選tkinter來給完成這個界面。
創建窗體
首先我們要導入tkinter,并創建一個窗體。
from tkinter import *top = Tk() # 創建一個窗體 top.geometry("1100x400+200+50") # 改變窗體的大小top.mainloop() # 進入消息循環顯示效果為
顯示課程
我們根據星期幾來放置課程,星期一一列星期二一列。
首先我們要創建一個列表來記錄星期的數據,再創建一個字典來保存當前天有幾節課。
week = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"] y = {}接下來我們把為每個課程數據創建一個文本控件,并把文本放在里面。
for course in js["kbList"]:scr = "課程名:\n{}\n講師:{}\n節:{}\n周:{}".format(course["kcmc"], course["xm"], course["zcd"], course["jcor"])print(scr)# 確認文本的位置x = week.index(course["xqjmc"])if course["xqjmc"] in y:y[course["xqjmc"]] = y[course["xqjmc"]] + 1else:y[course["xqjmc"]] = 0text = Text(top, width=30, height=5) # 創建一個文本控件text.place(x=x * 215 + 10, y=y[course["xqjmc"]] * 70 + 20) # 在屏幕上放置文本控件text.insert(INSERT, scr) # 在控件上放置文本通過x保存星期的天數,并格式化為0~7,用y保存一天有幾節課。
最后進入消息循環:
top.mainloop() # 進入消息循環運行的結果是:
當然,這樣的結果并不能讓我們滿意。我們希望能夠根據當前所在的周數顯示課程。而且這個界面也太丑了,還不如直接下載課程來的方便。下面讓我們來改進課程表。
全部代碼
# -*- coding:GBK -*- # 文件編碼 import json from tkinter import *class_js = '''[數據]''' js = json.loads(class_js) # 轉化為jsonweek = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"] y = {}top = Tk() # 創建一個窗體 top.geometry("1100x400+200+50") # 改變窗體的大小for course in js["kbList"]:scr = "課程名:\n{}\n講師:{}\n節:{}\n周:{}".format(course["kcmc"], course["xm"], course["zcd"], course["jcor"])print(scr)# 確認文本的位置x = week.index(course["xqjmc"])if course["xqjmc"] in y:y[course["xqjmc"]] = y[course["xqjmc"]] + 1else:y[course["xqjmc"]] = 0text = Text(top, width=30, height=5) # 創建一個文本控件text.place(x=x * 215 + 10, y=y[course["xqjmc"]] * 70 + 20) # 在屏幕上放置文本控件text.insert(INSERT, scr) # 在控件上放置文本top.mainloop() # 進入消息循環總結
- 上一篇: 视频教程-2020年软考系统分析师--案
- 下一篇: 关于sql查询分析器无法登录的问题