Pythonアプリ(6):カレンダーを作ろう!
後半課題の曜日の色が変わらない人はtentoappを最新のもの(2019.01.24以降のバージョン)にしてください。古いバージョンだと色が変わりません。
今月のカレンダーを表示するプログラムを作ります。
1. grid(グリッド)で配置する
カレンダーでは、日付をマス目状に配置します。マス目状にウィジェットを配置したい場合は pack()
や place()
ではなく grid()
を使います。
まず、週は月〜日の7日あるので、マス目の横は7マスになります。また、ひと月には最大で6週あるので、曜日の文字を入れる行と合わせてマス目の縦は7マスになります。赤線で分けるとこのようになるでしょう。
grid(col,row)
を使うとウィジェットをマス目に配置できます。
col
は横方向の位置、
row
は縦方向の位置を表します。すると、
(col, row)
の組み合わせはこのようになります。
たとえば、
l = Label(app)l.text = "月"l.grid(0,0)
のようにすると“月”の文字を表示するラベルが一番左上に置かれます。
2. for文を使おう
今回、マスが7x6=42個あるので、以下のように一つ一つLabelを作っていくと下のようにたいへん長いプログラムになります。
app = App()
l1 = Label(app)l1.text = "月"l1.grid(0,0)
l2 = Label(app)l2.text = "火"l2.grid(1,0)
l3 = Label(app)l3.text = "水"l3.grid(2,0)・・・・・・
そこで リスト と for文 で繰り返しを使います。
2-1. 曜日表示を作る
まずは1行目の曜日表示を作りましょう。
from tentoapp import *
app = App()
youbi = ["月", "火", "水", "木", "金", "土", "日"]col = 0for y in youbi: l = Label(app) l.text = y l.grid(col, 0) col += 1
app.start()
youbi = ["月", "火", "水", "木", "金", "土", "日"]
まず、youbiという リスト を定義します。youbiには“月”から“日”までの7つの文字を入れます。
col = 0for y in youbi: l = Label(app) l.text = y l.grid(col, 0) col += 1
for y in youbi:
は、youbiリストの一個一個を取り出して変数yに入れながら繰り返す、ということです。変数yには最初のループでは“月”が入り、二番目のループでは“火”、というふうに“日”まで繰り返されます。 横位置を一つずつずらす必要があるので、変数colをループごとに1増やしていることに注目してください。
2-2. 日付部分を作る
日付部分は、横に7マス入れるのを6回繰り返す必要があります。そこで、for文の外側でまたfor文を使います。
from tentoapp import *
app = App()
youbi = ["月", "火", "水", "木", "金", "土", "日"]col = 0for y in youbi: l = Label(app) l.text = y l.grid(col, 0) col += 1
n = 1for row in range(6): for col in range(7): l = Label(app) l.text = n l.grid(col,row+1) n += 1app.start()
まず、 range(6)
というのは 0から5までの数字 を表しています。range(レンジ)は英語で範囲という意味です。リスト[0,1,2,3,4,5]と同じです。
for col in range(7): l = Label(app) l.text = "0" l.grid(col,row+1)
この内側のfor文では、横に7マス並べています。これを外側のfor文で6回繰り返すので、7マスの行が6つできることになります。 l.grid(col,row+1)
で、rowを1大きくしているのは、1行目に曜日を表示する行があるからです。
さて、今回は解説するのはここまでです!あとは自分でカレンダーを完成させてください!
やってみよう!
1. 開始日を正しい位置にしよう☆☆☆
毎月、1日が月曜日から始まるとは限りません。たとえば2019年の1月は火曜日から始まります。 1日が火曜日から始まるカレンダーにしてみましょう。
2. 最後の日を31日にしよう☆☆
42日まであるのも変ですね。31日で終わるようにしてください。
3. 見かけを調整しよう☆
- フォントのサイズを大きくしよう
- 曜日のフォントの色を土曜日は青、日曜日は赤にしよう (曜日の色が変わらない人はtentoapp.pyを最新版に入れ替えてください。)
- 数字を右揃えにしよう
4. 月を移動可能にしよう☆☆☆☆☆
たとえば、下のカレンダーのように、◁▷をクリックすると前の月と次の月へ移動できるようにしてみよう。