Python カレンダー 【tkinter】

tkinter

Python の tkinter でカレンダーを作りましたので公開します。ずっと使えると思います。

環境: Windows 10, Anaconda + Python 3 で動作確認をしています。
tkinter を使用しています。

使い方

① デスクトップなどにフォルダを作り、python_calendar_v01.py 等のファイルを作ってください。
② 下記のスクリプトを貼りつけて保存後、コマンドプロンプト等から実行してみてください。
③ [prev]、[next] ボタンで、前の月、次の月が表示されます。

まとめ

Python の tkinter を使ったカレンダーの作り方についてまとめました。
ちょうどよい感じのカレンダーがなかったので、自作しました。
日付の部分は、ボタンを配置して作っていますが、いまは特に機能は入れていないです。なお、Python で HTML のカレンダーを出力するスクリプトについては、以下のリンクにまとめています。

関連リンク
・ HTML カレンダーを生成する 【Python】
・ おすすめ書籍ベスト4 【Python&機械学習】

スクリプト:tkinter カレンダー

import sys 
import tkinter as tk1 
import datetime as dt1 
import calendar as cl1 

def generate_calendar1(y1, m1): 
    global wd1 
    global cal1 
    for i1 in range( len(cal1) ): 
        cal1[i1] = ""
    date1 = dt1.date( y1, m1, 1 ) 
    wd1 = date1.weekday() 
    if wd1 > 5: 
        wd1 = wd1 - 7 
    cal_max1 = cl1.monthrange( y1, m1 )[1] 
    for i1 in range( cal_max1 ): 
        str1 = str( i1+1 ) 
        i2 = i1 + wd1 + 1 
        cal1[i2] = str1 

def set_calendar1(cal1, btn1): 
    for i1 in range( len(cal1) ): 
        str1 = cal1[i1] 
        btn1[i1]["text"] = str1 

def prev_next1( n1 ): 
    global y1 
    global m1 
    global btn1 
    m2 = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ] 
    m1 = m1 + n1 
    if m1 > 12: 
        y1 = y1 + 1 
        m1 = 1 
    elif m1 < 1: 
        y1 = y1 - 1 
        m1 = 12 
    label1["text"] = str(m1) 
    label2["text"] = m2[m1-1] 
    label3["text"] = str(y1) 
    generate_calendar1(y1, m1) 
    set_calendar1(cal1, btn1) 

def btn_click1():
    return 

root = tk1.Tk()
root.title(u"iroha_calendar v0.1")
root.geometry("755x530+100+100")
root["bg"] = "#EEEEE8"

label1 = tk1.Label(font=("Meiryo UI",26),anchor=tk1.CENTER, width=2)
label1["bg"] = "#EEEEE8" 
label1.place(x=50, y=3) 

label2 = tk1.Label(font=("Meiryo UI",10),anchor=tk1.W, width=10)
label2["bg"] = "#EEEEE5" 
label2.place(x=120, y=8) 

label3 = tk1.Label(font=("Meiryo UI",12),anchor=tk1.W, width=10)
label3["bg"] = "#EEEEE8" 
label3.place(x=120, y=25) 

label4 = [""]*7 
a1 = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" ] 
for i1 in range( 7 ): 
    label4[i1] = tk1.Label(text=a1[i1], font=("Meiryo UI",9), anchor=tk1.CENTER, width=10)
    label4[i1]["bg"] = "#EEEEE8" 
    label4[i1].place(x=30+103*i1, y=55) 

btn1 = [""]*42 
for i1 in range( 6 ): 
    for i2 in range( 7 ): 
        fg1 = "#000000" 
        if i2 == 0: 
            bg1 = "#FFF0F0" 
            fg1 = "#FF0000" 
        elif i2 == 6: 
            bg1 = "#F6F0FF" 
            fg1 = "#0000A0" 
        else: 
            bg1 = "#FFFFFF"  
        btn1[i2+7*i1] = tk1.Button(root, font=("Meiryo UI",11), anchor=tk1.NW, bg=bg1, fg=fg1, relief='flat', command=btn_click1) 
        x2 = 20 + 103 * i2 
        y2 = 75 + i1 * 73 
        btn1[i2+7*i1].place(x=x2, y=y2, width=100, height=70)

btn2 = tk1.Button(root, text="prev", font=("Meiryo UI",11), bg="#D0D0D0", relief='flat', command=lambda:prev_next1(-1) )
btn2.place(x=600, y=10, width=60, height=30)

btn3 = tk1.Button(root, text="next", font=("Meiryo UI",11), bg="#D0D0D0", relief='flat', command=lambda:prev_next1(1) )
btn3.place(x=680, y=10, width=60, height=30)

now1 = dt1.datetime.now() 
y1 = now1.year 
m1 = now1.month 
d1 = now1.day 
wd1 = 0
cal1 = [""]*40 

prev_next1( 0 ) 

root.mainloop()
タイトルとURLをコピーしました