Raspberry pi を使って Python を勉強中です。
とりあえず、3.5 inch ディスプレイを活用するため置き時計風 GUI 画面を作ります。
やったこと
- 日付と時刻を表示 → プログラムで実現
- 画面は常に最大化、最前面に表示 → プログラムで実現
- Raspberry pi 起動時に実行したい → autostart に登録
- スリープモードはいらない → LXDE-autostart config を編集
環境
- Raspberry pi 3 Model B Rev 1.2
- SD: Samsung microSD Card 32GB EVOPlus Class10 UHS-I
- Display: Kuman 3.5inch HDMI Monitor Touch Screen Display Resolution (480320 To 19201080)
- Python 3.5.3
ソースコード
コメントもたくさん入れているし、ググれば分かることばかりなので説明は省略。
clock.py
# Tkinter モジュールをインポートしてコード内で省略可能とする
from tkinter import *
from datetime import datetime
# メインウィンドウ作成
root = Tk()
# メインウィンドウサイズ
root.geometry("720x480")
# メインウィンドウタイトル
root.title("Clock")
# Canvas 作成
c = Canvas(root, bg="#FFFFFF", width=720, height=480)
c.pack(expand=True, fill=BOTH)
# 文字列作成
cd = c.create_text(100, 100, font=('', 40, 'bold'), fill='black')
ct = c.create_text(100, 160, font=('', 120), fill='black')
# 画面がリサイズされたとき
def change_size(event):
# 画面の中心座標を取得
w = c.winfo_width() / 2
h = c.winfo_height() / 2
# 文字列の矩形の中心座標を取得
cd_coords = c.bbox(cd)
cd_w = cd_coords[0] + (cd_coords[2] - cd_coords[0]) / 2
cd_h = cd_coords[1] + (cd_coords[3] - cd_coords[1]) / 2
ct_coords = c.bbox(ct)
ct_w = ct_coords[0] + (ct_coords[2] - ct_coords[0]) / 2
ct_h = ct_coords[1] + (ct_coords[3] - ct_coords[1]) / 2
# 中心座標を合わせるように移動
c.move(cd, w - cd_w, h - cd_h - 60)
c.move(ct, w - ct_w, h - ct_h + 60)
# 画面のリサイズをバインドする
root.bind('<Configure>', change_size)
# メインウィンドウの最大化
root.attributes("-zoomed", "1")
# 常に最前面に表示
root.attributes("-topmost", True)
def cupdate():
# 現在時刻を表示
now = datetime.now()
d = '{0:0>4d}/{1:0>2d}/{2:0>2d} ({3}.)'.format(now.year, now.month, now.day, now.strftime('%a'))
t = '{0:0>2d}:{1:0>2d}:{2:0>2d}'.format(now.hour, now.minute, now.second)
c.itemconfigure(cd, text=d)
c.itemconfigure(ct, text=t)
c.update()
# 1秒間隔で繰り返す
root.after(1000, cupdate)
# コールバック関数を登録
root.after(1000, cupdate)
# メインループ
root.mainloop()
Raspberry pi 起動時に実行したい
autostart に登録(新規作成)すれば良いらしいです。
$ mkdir ~/.config/autostart; cd $_
$ vi clock.desktop
で、clock.desktop
にはこんな感じで設定を書いておきます。
clock.desktop
[Desktop Entry]
Type=Application
Name=Desktop Clock
Exec=/usr/bin/python3 /home/pi/clock.py
Terminal=false
再起動して、GNOME が起動したとき自動的に clock.py
が実行されます。
画面のスリープモードを無効にする
10 分くらい放置していたらスリープモードになってしまったので、スリープモードを無効化します。
$ sudo vi /etc/xdg/lxsession/LXDE/autostart
ファイルの最下行に追加します。
すでに書いてある場合は省略して OK です。
@xset s off
@xset s noblank
@xset -dpms
完成
起動して何もしない状態で、ちゃんと置き時計風の表示になりました。個人的には満足。
(ちょっと表示がダサいのはご愛嬌)