第5回 可能性の模索

はじめに


時間の管理ができる人ってすごいですよね。僕は苦手です。つい先々週も、デジタルファブリケーションのレーザーカッティングの課題について色々と勉強する予定でしたが、
気づいたらひたすらpythonでブラックジャック作ってました。時間はあっという間に過ぎ去り、レーザーカットの課題をやり始めたのが10月31日。
実際にカッティングしたのは11月4日。誰がどう見ても計画的ではないですよね。
課題の期限を入力すると、カレンダーに出力してくれる機能をpythonで作ろうとしました。

(((作ろうとしました)))

すみません、期限内には終わりませんでした。
とりあえず、カレンダーを出力することは出来ましたが、肝心の課題の期限入力画面とその結果を出力する機能はありません。
ただただ普通のカレンダーが画面いっぱいに表示されます。
参考サイト
  1. import tkinter
  2. import calendar
  3. import datetime
  4. from tkinter import font
  5. import PySimpleGUI as sg
  6. sg.theme('LightBlue6')
  7. today = datetime.date.today()
  8. def create_layout(cal_date):
  9.     weekday = ['SUN','MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']
  10.     cal = calendar.Calendar(firstweekday=6)
  11.     days = cal.monthdatescalendar(cal_date.year, cal_date.month,)
  12.     layout = [[sg.Text(cal_date.year, font=(None, 50, 'bold'))],
  13.               [sg.Push(), sg.Button('<<'), sg.Button('<'), sg.Text(cal_date.month, font=(None, 30)), sg.Button('>'), sg.Button('>>'), sg.Push()]]
  14.     inner = []
  15.     
  16.     for week in weekday:
  17.         inner.append(sg.Text(week, size=(20,4), text_color='white', background_color='green', justification='center'))
  18.     layout.append(inner.copy())
  19.     def date_judgement(i, day):
  20.         if day == today:
  21.             return sg.Text(day.day, size=(20,4), justification='right', text_color='white', background_color='gray')
  22.         elif i == 0 and day.month == cal_date.month:
  23.             return sg.Text(day.day, size=(20,4), justification='right', text_color='red')
  24.         elif i == 6 and day.month == cal_date.month:
  25.             return sg.Text(day.day, size=(20,4), justification='right', text_color='blue')
  26.         elif day.month == cal_date.month:
  27.             return sg.Text(day.day, size=(20,4), justification='right')
  28.         elif i == 0:
  29.             return sg.Text(day.day, size=(20,4), justification='right', text_color='#ff9999')
  30.         elif i == 6:
  31.             return sg.Text(day.day, size=(20,4), justification='right', text_color='#9999ff')
  32.         else:
  33.             return sg.Text(day.day, size=(20,4), justification='right', text_color='#cccccc')
  34.     for row in days:
  35.         inner = []
  36.         for i, day in enumerate(row):
  37.             sg_text = date_judgement(i, day)
  38.             inner.append(sg_text)
  39.         layout.append(inner.copy())
  40.     return layout
  41. def main():
  42.     cal_date = today
  43.     layout = create_layout(cal_date)
  44.     window = sg.Window('Simple Calendar', layout)
  45.     while True:
  46.         event, _ = window.read()
  47.         if event == sg.WIN_CLOSED:
  48.             break
  49.         elif event == '<':
  50.             cal_date = datetime.date(cal_date.year, cal_date.month, 1) - datetime.timedelta(days=1)
  51.         elif event == '>':
  52.             cal_date = datetime.date(cal_date.year, cal_date.month, 28) + datetime.timedelta(days=4)
  53.         elif event == '<<':
  54.             cal_date = datetime.date(cal_date.year - 1, cal_date.month, 1)
  55.         elif event == '>>':
  56.             cal_date = datetime.date(cal_date.year + 1, cal_date.month, 1)
  57.         window.close()
  58.         window = sg.Window('Simple Calendar', create_layout(cal_date))
  59.     window.close()
  60. if __name__ == '__main__':
  61.     main()
ps.課題よりも、みなとみらい祭の準備・後片付けが大変でした。実行委員会の皆様、お疲れ様でした。