コンテンツにスキップ

Pythonアプリ(6):カレンダーを作ろう!

後半課題の曜日の色が変わらない人はtentoappを最新のもの(2019.01.24以降のバージョン)にしてください。古いバージョンだと色が変わりません。

tentoappのダウンロード

今月のカレンダーを表示するプログラムを作ります。

tentoapp-06-01.png

1. grid(グリッド)で配置する

カレンダーでは、日付をマス目状に配置します。マス目状にウィジェットを配置したい場合は pack()place() ではなく grid() を使います。

まず、週は月〜日の7日あるので、マス目の横は7マスになります。また、ひと月には最大で6週あるので、曜日の文字を入れる行と合わせてマス目の縦は7マスになります。赤線で分けるとこのようになるでしょう。

tentoapp-06-02.png

grid(col,row)

を使うとウィジェットをマス目に配置できます。

col

は横方向の位置、

row

は縦方向の位置を表します。すると、

(col, row)

の組み合わせはこのようになります。

tentoapp-06-03.png

たとえば、

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 = 0
for y in youbi:
l = Label(app)
l.text = y
l.grid(col, 0)
col += 1
app.start()

tentoapp-06-04.png

youbi = ["", "", "", "", "", "", ""]

まず、youbiという リスト を定義します。youbiには“月”から“日”までの7つの文字を入れます。

col = 0
for 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 = 0
for y in youbi:
l = Label(app)
l.text = y
l.grid(col, 0)
col += 1
n = 1
for row in range(6):
for col in range(7):
l = Label(app)
l.text = n
l.grid(col,row+1)
n += 1
app.start()

tentoapp-06-05.png

まず、 range(6) というのは 0から5までの数字 を表しています。range(レンジ)は英語で範囲という意味です。リスト[0,1,2,3,4,5]と同じです。

内側のfor文
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. 月を移動可能にしよう☆☆☆☆☆

たとえば、下のカレンダーのように、◁▷をクリックすると前の月と次の月へ移動できるようにしてみよう。

tentoapp-06-06.png