mycalendarのclassでinstance化して使用している
Win2のclassの中で
mycalendarのself定義しているdayを使用したいのですが、
どう書けばいいのかわかりません。
どなたかご教授願います。
python
1# -*- coding:utf-8 -*- 2 3import tkinter as tk 4import datetime 5 6 7# カレンダーを作成するフレームクラス 8class mycalendar(tk.Frame): 9 def __init__(self, master=None, cnf={}, **kw): 10 "初期化メソッド" 11 tk.Frame.__init__(self, master, cnf, **kw) 12 13 # 現在の日付を取得 14 now = datetime.datetime.now() 15 # 現在の年と月を属性に追加 16 self.year = now.year 17 self.month = now.month 18 19 # frame_top部分の作成 20 frame_top = tk.Frame(self) 21 frame_top.pack(pady=5) 22 self.previous_month = tk.Label(frame_top, text="<", font=("", 14)) 23 self.previous_month.bind("<1>", self.change_month) 24 self.previous_month.pack(side="left", padx=10) 25 self.current_year = tk.Label(frame_top, text=self.year, font=("", 18)) 26 self.current_year.pack(side="left") 27 self.current_month = tk.Label(frame_top, text=self.month, font=("", 18)) 28 self.current_month.pack(side="left") 29 self.next_month = tk.Label(frame_top, text=">", font=("", 14)) 30 self.next_month.bind("<1>", self.change_month) 31 self.next_month.pack(side="left", padx=10) 32 33 # frame_week部分の作成 34 frame_week = tk.Frame(self) 35 frame_week.pack() 36 button_mon = d_button(frame_week, text="Mon") 37 button_mon.grid(column=0, row=0) 38 button_tue = d_button(frame_week, text="Tue") 39 button_tue.grid(column=1, row=0) 40 button_wed = d_button(frame_week, text="Wed") 41 button_wed.grid(column=2, row=0) 42 button_thu = d_button(frame_week, text="Thu") 43 button_thu.grid(column=3, row=0) 44 button_fri = d_button(frame_week, text="Fri") 45 button_fri.grid(column=4, row=0) 46 button_sta = d_button(frame_week, text="Sat", fg="blue") 47 button_sta.grid(column=5, row=0) 48 button_san = d_button(frame_week, text="San", fg="red") 49 button_san.grid(column=6, row=0) 50 51 # frame_calendar部分の作成 52 self.frame_calendar = tk.Frame(self) 53 self.frame_calendar.pack() 54 55 # 日付部分を作成するメソッドの呼び出し 56 self.create_calendar(self.year, self.month) 57 58 def create_calendar(self, year, month): 59 "指定した年(year),月(month)のカレンダーウィジェットを作成する" 60 61 # ボタンがある場合には削除する(初期化) 62 try: 63 for key, item in self.day.items(): 64 item.destroy() 65 except: 66 pass 67 68 # calendarモジュールのインスタンスを作成 69 import calendar 70 cal = calendar.Calendar() 71 # 指定した年月のカレンダーをリストで返す 72 days = cal.monthdayscalendar(year, month) 73 74 # 日付ボタンを格納する変数をdict型で作成 75 self.day = {} 76 # for文を用いて、日付ボタンを生成 77 for i in range(0, 42): 78 c = i - (7 * int(i / 7)) 79 r = int(i / 7) 80 try: 81 # 日付が0でなかったら、ボタン作成 82 if days[r][c] != 0: 83 #日付ボタンを押下すると別ウィンドウを表示 84 self.day[i] = d_button(self.frame_calendar, text=days[r][c], command=self.createNewWindow) 85 self.day[i].grid(column=c, row=r) 86 except: 87 """ 88 月によっては、i=41まで日付がないため、日付がないiのエラー回避が必要 89 """ 90 break 91 92 def change_month(self, event): 93 # 押されたラベルを判定し、月の計算 94 if event.widget["text"] == "<": 95 self.month -= 1 96 else: 97 self.month += 1 98 # 月が0、13になったときの処理 99 if self.month == 0: 100 self.year -= 1 101 self.month = 12 102 elif self.month == 13: 103 self.year += 1 104 self.month = 1 105 # frame_topにある年と月のラベルを変更する 106 self.current_year["text"] = self.year 107 self.current_month["text"] = self.month 108 # 日付部分を作成するメソッドの呼び出し 109 self.create_calendar(self.year, self.month) 110 111 #別ウィンドウを呼び出し関数 112 def createNewWindow(self): 113 self.newWindow = tk.Toplevel(root) 114 self.app = Win2(self.newWindow) 115 116 117# デフォルトのボタンクラス 118class d_button(tk.Button): 119 def __init__(self, master=None, cnf={}, **kw): 120 tk.Button.__init__(self, master, cnf, **kw) 121 self.configure(font=("", 14), height=2, width=4, relief="flat") 122 123# 別ウィンドウクラス 124class Win2(tk.Frame): 125 def __init__(self,master): 126 127 super().__init__(master) 128 self.pack() 129 self.master.geometry("500x500") 130 self.master.title("add schedule") 131 self.today_schedule() 132 #self.create_text() 133 self.create_addbtn() 134 self.create_clsbtn() 135 136 def today_schedule(self): 137 now = datetime.datetime.now() 138 # 現在の年と月を属性に追加 139 self.year = now.year 140 self.month = now.month if len(str(now.month)) == 2 else "0{}".format(now.month) 141 self.day = now.day if len(str(now.day)) == 2 else "0{}".format(now.month) 142 print("year={},month={},day={}".format(self.year, self.month, self.day)) 143 yymmdd = "{}-{}-{}".format(self.year, self.month, self.day) 144 print("yymmdd = {}".format(yymmdd)) 145 import sqlite3 146 dbfile = sqlite3.connect('schedule.db') 147 c = dbfile.cursor() 148 c.execute("select * from cl_table") 149 list = c.fetchone() 150 self.ddmm = tk.Label(self.master, text=list[1]) 151 self.schedule = tk.Label(self.master, text=list[2]) 152 self.ddmm.place(x=150, y=50) 153 self.schedule.place(x=250, y=50) 154 155 156 157 158 159 # 別ウィンドウボタン表示 160 def create_addbtn(self): 161 # Button 162 self.button_quit = tk.Button(self.master,text="Add", command=self.quit_window) 163 self.button_quit.place(x=420, y=450) 164 165 # 別ウィンドウボタン表示 166 def create_clsbtn(self): 167 # Button 168 self.button_quit = tk.Button(self.master,text="Close", command=self.quit_window) 169 self.button_quit.place(x=350, y=450) 170 171 # 別ウィンドウclose関数 172 def quit_window(self): 173 self.master.destroy() 174 175 def create_text(self): 176 self.schedule_input = tk.Entry(self.master) 177 self.schedule_input.pack() 178 179# ルートフレームの定義 180root = tk.Tk() 181root.title("Calendar App") 182mycal = mycalendar(root) 183mycal.pack() 184root.mainloop()
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/11 07:03
2020/09/11 08:20
2020/09/11 08:50