(Python)tkcalendarで土日を青、赤に変える

やったこと

最初に

tkcalendarを使っていて、土日の色を青と赤の別の色に変えようとしたけど簡単にできないかったので、元のコードを変えてやったお話です。

https://tkcalendar.readthedocs.io/en/stable/Calendar.html

公式のやつをみると以下のようにすると色を変更できるよって書いてあります。

# background color of week-end days
# 訳: 週末の背景の色を変えるよ〜
weekendbackground :str
# foreground color of week-end days
# 訳: 週末の文字の色を変えるよ〜
weekendforeground :str

ふむふむ

で結果がこれ。。。

既存の関数を使った設定

あ、そっちね。。

土曜日は青で日曜日は赤にしたいんだ!!

確かに両方週末だけど、、

一応この時のコードです。

import tkinter as tk
from tkinter import ttk
from tkcalendar import Calendar, DateEntry 

# メインウィンドウ生成
root = tk.Tk()
root.title('Calender')
root.geometry('400x300')

# スタイルの設定
style = ttk.Style()
style.theme_use('default')
style.configure('style',background='white')
# カレンダーの設定
cal = Calendar(root, # 表示するウィンドウ
               weekendbackground="blue", # 週末の背景色
               showweeknumbers=False,    # 先頭に週番号をつけない
               style='style'             # styleの指定
               )
# 表示
cal.place(x=0, y=0)
root.mainloop()

改善

使える関数調べてみたけどいいのなさそうだったので、もう直接変えに行きましょう。 先に結果を見せるとこんな感じ

結果うまくいってるーー

<<手順>>

  1. ダウンロードしたtkcalendarを自分の作業環境に持ってくる(元のファイルを直接編集してもOK)

  2. 内容を変更する。

1 ダウンロードしたtkcalendarを自分の作業環境に持ってくる

※ 元のファイルを直接編集する人は飛ばしてください。 ※ また、tkcalendarがどこにあるのかわかっている人も飛ばしてください。

まずどこにあるのかを知る

import sys
print('\n'.join(sys.path))

このコマンドを使うとimportする際にどのディレクトリからimportしているのかわかるので表示されたディレクトリのどこかに"tkcalendar"が存在しているのでそれを作業しているディレクトリに持ってくる。

今回はhelperディレクトリを作成してその中に入れています。

|--- main
  |--- test.py
  |--- helper
    |--- tkcalendar ## ここに持ってきてます
      |--- __pycache__.py
      |--- __init__.py
      |--- __main__.py
      |--- calender_.py
      |--- deteentry.py
      |--- tooltip.py

2 内容を変更する。

※ import先を変更します。test.py(元のコードの)

- from tkcalendar import Calendar, DateEntry 
+ from helper.tkcalendar import Calendar, DateEntry 
# どこに入れたのかでhelperでない可能性あり

※ 以下の編集するファイルは全てcakendar_.pyです。

# 約400行
# __init__関数内 の self._properties=[:,:,:]に追加する。
'weekendbackground': 'blue', ### 土曜日の背景色
'weekendforeground': 'white',### 土曜日の文字色
'weekendbackground_2': 'red',### 日曜日の背景色
'weekendforeground_2': 'white',### 日曜日の文字色
# 約779行
# _setup_style関数内 の 
# bwe_bg = self._properties.get('weekendbackground')
# we_fg = self._properties.get('weekendforeground')
# この下に追加する
we2_bg = self._properties.get('weekendbackground_2') ### 日曜日の色をセットする
we2_fg = self._properties.get('weekendforeground_2') ### 日曜日の色をセットする
# 約794行
# _setup_style関数内 の 
# self.style.configure('we.%s.TLabel' % self._style_prefixe, background=we_bg,foreground=we_fg)
# この下に追加する
self.style.configure('we2.%s.TLabel' % self._style_prefixe, background=we2_bg,foreground=we2_fg) ### 色を変える
# 約926行
# _display_days_with_othermonthdays関数内 の変更  
- week_days[self['weekenddays'][0] - 1] = 'we'
+ week_days[self['weekenddays'][1] - 1] = 'we2'

以上で写真のようになります。