質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

受付中

python Tkinter  について

ChaCha_MaRu
ChaCha_MaRu

総合スコア15

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

0回答

0グッド

0クリップ

1731閲覧

投稿2018/12/30 01:42

編集2018/12/31 02:58

PythonのTkinterについて質問です。

Python3.6

1 2# -*- coding:utf-8 -*- 3 4import tkinter as tk 5 6# カレンダーを作成するフレームクラス 7class mycalendar(tk.Frame): 8 def __init__(self,master=None,cnf={},**kw): 9 "初期化メソッド" 10 import datetime 11 tk.Frame.__init__(self,master,cnf,**kw) 12 13 #予定の追加ボタンが押された時の反応 14 def tsuika(): 15 root.destroy() 16 selectgui() 17 18 # 現在の日付を取得 19 now = datetime.datetime.now() 20 # 現在の年と月を属性に追加 21 self.year = now.year 22 self.month = now.month 23 24 #予定の追加ボタンの作成 25 btn=tk.Button(text="予定の追加",width=20,command=tsuika) 26 btn.place(x=750,y=850) 27 28 29 30 31 # frame_top部分の作成 32 frame_top = tk.Frame(self) 33 frame_top.pack(pady=5) 34 self.previous_month = tk.Label(frame_top, text = "<", font = ("",14)) 35 self.previous_month.bind("<1>",self.change_month) 36 self.previous_month.pack(side = "left", padx = 10) 37 self.current_year = tk.Label(frame_top, text = self.year, font = ("",18)) 38 self.current_year.pack(side = "left") 39 self.current_month = tk.Label(frame_top, text = self.month, font = ("",18)) 40 self.current_month.pack(side = "left") 41 self.next_month = tk.Label(frame_top, text = ">", font = ("",14)) 42 self.next_month.bind("<1>",self.change_month) 43 self.next_month.pack(side = "left", padx = 10) 44 45 46 47 48 # frame_week部分の作成 49 frame_week = tk.Frame(self) 50 frame_week.pack() 51 button_mon = d_button(frame_week, text = "Mon") 52 button_mon.grid(column=0,row=0) 53 button_tue = d_button(frame_week, text = "Tue") 54 button_tue.grid(column=1,row=0) 55 button_wed = d_button(frame_week, text = "Wed") 56 button_wed.grid(column=2,row=0) 57 button_thu = d_button(frame_week, text = "Thu") 58 button_thu.grid(column=3,row=0) 59 button_fri = d_button(frame_week, text = "Fri") 60 button_fri.grid(column=4,row=0) 61 button_sta = d_button(frame_week, text = "Sat", fg = "blue") 62 button_sta.grid(column=5,row=0) 63 button_san = d_button(frame_week, text = "San", fg = "red") 64 button_san.grid(column=6,row=0) 65 66 # frame_calendar部分の作成 67 self.frame_calendar = tk.Frame(self) 68 self.frame_calendar.pack() 69 70 # 日付部分を作成するメソッドの呼び出し 71 self.create_calendar(self.year,self.month) 72 73 def create_calendar(self,year,month): 74 "指定した年(year),月(month)のカレンダーウィジェットを作成する" 75 76 # ボタンがある場合には削除する(初期化) 77 try: 78 for key,item in self.day.items(): 79 item.destroy() 80 except: 81 pass 82 83 # calendarモジュールのインスタンスを作成 84 import calendar 85 cal = calendar.Calendar() 86 # 指定した年月のカレンダーをリストで返す 87 days = cal.monthdayscalendar(year,month) 88 89 # 日付ボタンを格納する変数をdict型で作成 90 self.day = {} 91 # for文を用いて、日付ボタンを生成 92 for i in range(0,42): 93 c = i - (7 * int(i/7)) 94 r = int(i/7) 95 try: 96 # 日付が0でなかったら、ボタン作成 97 if days[r][c] != 0: 98 self.day[i] = d_button(self.frame_calendar,text = days[r][c]) 99 self.day[i].grid(column=c,row=r) 100 except: 101 """ 102 月によっては、i=41まで日付がないため、日付がないiのエラー回避が必要 103 """ 104 break 105 106 def change_month(self,event): 107 # 押されたラベルを判定し、月の計算 108 if event.widget["text"] == "<": 109 self.month -= 1 110 else: 111 self.month += 1 112 # 月が0、13になったときの処理 113 if self.month == 0: 114 self.year -= 1 115 self.month = 12 116 elif self.month == 13: 117 self.year +=1 118 self.month =1 119 # frame_topにある年と月のラベルを変更する 120 self.current_year["text"] = self.year 121 self.current_month["text"] = self.month 122 # 日付部分を作成するメソッドの呼び出し 123 self.create_calendar(self.year,self.month) 124 125 126 127 128# デフォルトのボタンクラス 129class d_button(tk.Button): 130 def __init__(self,master=None,cnf={},**kw): 131 tk.Button.__init__(self,master,cnf,**kw) 132 self.configure(font=("",14),height=2, width=4, relief="flat") 133 134 135 136 137# ルートフレームの定義 138root = tk.Tk() 139root.title("Calendar App") 140mycal = mycalendar(root) 141root.geometry("900x900") 142mycal.pack() 143root.mainloop()

上記のコードでカレンダーを表示し、下に予定の追加ボタンを配置するところまでいきました。

次に行いたいこととしては
・予定の追加画面へ移動する
・予定の追加画面で入力した情報をそれぞれの日付に割り当て、日付ボタンをクリックすると下へ表示させる
ということを実装したいです。
ご教授よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。