日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

做个课程表吧(三)

發布時間:2023/12/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 做个课程表吧(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

事實上前兩個版本的界面還是不能讓人滿意,接下來我們來用pygame來為課程表優化界面吧。

文章目錄

  • 保存課程表數據
  • 繪制課程表
    • 初始化窗口
    • 繪制課程表的背景
    • 繪制課程表小格子
      • 定義課程格子類
      • 判斷課程是否符合條件
      • 繪制小格子
  • 繪制屏幕

保存課程表數據

我們把數據保存在外部文件上,方便多次修改于調用。

用data.json來保存開始的時間,和數據中保存數據中保存名字、周等的鍵名。

{"start": [2020, 2, 20],"book": {"name":"kcmc","teacher":"xm","week": "zcd","part": "jcor","weekday": "xqjmc","address": "cdmc"} }

用class.json保存課程數據,這樣在不同的更新課表后不用修改代碼直接修改課程文件即可。

然后打開這兩個文件,并轉化為json。

# 用外部文件來保存鍵值對 with open("data.json", "r") as f:init = json.loads(f.read())# 保存課程數據 with open("class.json", "rb") as f:class_js = f.read()js = json.loads(class_js) # 轉化為json

繪制課程表

初始化窗口

定義一個970*720的窗口大小,將屏幕填充為白色。設置標題為課程表。

pygame.init() screen = pygame.display.set_mode([970, 720]) screen.fill([255, 255, 255]) pygame.display.set_caption("課程表")

繪制課程表的背景

課程表的背景有

  • 一條條顏色漸變的方塊(區分不同節課)

  • 一塊顯示當前星期幾的方塊

  • 在最上面顯示星期

  • def c_box(week):for i in range(18):pygame.draw.rect(screen, [255-15*i, 255, 170+5*i], [0, 45 + 45 * (i-1), 1080, 45], 0)# 顯示當前星期幾surface = pygame.Surface((135, 720))surface.fill([240, 240, 200])surface.set_alpha(150)screen.blit(surface, ((week - 1) * 130 + 50, 0))# 設置字體my_font = pygame.font.SysFont("microsoftyaheimicrosoftyaheiui", 30)weekday = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]for i in range(7):text = my_font.render(weekday[i], True, [100, 200, 255], [255, 255, 255])text.set_colorkey([255, 255, 255]) # 透明化screen.blit(text, (130*i + 75, 5))

    顯示的結果為:

    繪制課程表小格子

    定義課程格子類

    課程的小格子根據課程時間長短確認

    定義一個課程格子類

    其中輸入為:

  • 要顯示的課程信息
  • 課程在星期幾上課
  • 課程開始的節數
  • 課程結束的節數
  • 課程格子的顏色隨機,文本根據換行符排列。

    最后用一個精靈組來保存每個課程格子。

    # 課程表里的每個格子 class Class_list(pygame.sprite.Sprite):def __init__(self, text, weekday, start, end):# 繼承super().__init__()# 分割文本self.text = text.split("\n")self.weekday = weekday# 設置控件的大小self.image = pygame.Surface((125, 80*(end-start)))self.r, self.g, self.b = random.randint(0, 254), random.randint(0, 254), random.randint(0, 254)self.image.fill([self.r, self.g, self.b])self.image.set_alpha(200) # 透明化# 設置控件的位置self.rect = pygame.Rect((130*weekday + 55, 45*start), self.image.get_size())# 繪制字體self.font()def font(self):# 定義一個字體my_font = pygame.font.SysFont("microsoftyaheimicrosoftyaheiui", 15)# 如果背景為淺色則前景為深色if 0.21 * self.r + 0.72 * self.g + 0.07 * self.b > 200:color = [0, 0, 0]else:color = [255, 255, 255]n = 0# 每行打印一句話for i in self.text:text = my_font.render(i, True, color, [self.r, self.g, self.b])self.image.blit(text, (0, n*20))n += 1 class_box = pygame.sprite.Group()

    判斷課程是否符合條件

    同上一篇博客。

    for course in js["kbList"]:scr = "{}\n講師 {}\n周 {}\n地點 {}".format(course[key["name"]], course[key["teacher"]], course[key["week"]], course[key["address"]])week = course[key["week"]]# 判斷課程是否是單雙周的課程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: # 判斷該課程是否是當前周的課程# 根據節來優化顯示效果read_class(course, key)

    繪制小格子

    如果判斷正確,就繪制課程小格子。輸入的內容為課程的數據。

    def read_class(course):scr = "{}\n講師 {}\n周 {}\n地點 {}".format(course[key["name"]], course[key["teacher"]], course[key["week"]], course[key["address"]]) # 要顯示的課程信息part = course[key["part"]]part = part.split("-")start_part, end_part = eval(part[0]), eval(part[-1])# 確認文本的位置x = weekday.index(course[key["weekday"]])li = Class_list(scr, x, start_part, end_part)class_box.add(li)

    繪制屏幕

    把課程格子繪制在屏幕上,最后更新屏幕。

    class_box.draw(screen) pygame.display.update() while True:for event in pygame.event.get():if event.type == pygame.QUIT:# 退出游戲pygame.quit()break

    最后的顯示效果為:

    我們的課程表就做好啦!

    總結

    以上是生活随笔為你收集整理的做个课程表吧(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。