1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python: Tkinter で日付入デジタル時計を作って画面に表示する (2024.10.25)

Last updated at Posted at 2024-10-25

はじめに

久しぶりの投稿である。
どうしても日付と時刻の両方が表示される時計をスクリーンに配置したくて、自作することにした。

当方の環境は以下の通り。

M1 Pro MacBook Pro 14"
macOS Sequoia 15.0.1
Python 3.13.0
Tcl/Tk 8.6.15

やったこと

やったことは以下の通り。

  1. Python Tkinterを用いてデジタル時計を表示するプログラムを作成。
  2. MacのAutomatorで作成したプログラムを起動するシェルスクリプトをapp化(Pythonのありかと実行するプログラム名はフルパスで記載)
  3. Elgato Stream Deckに入れ込んでワンタッチでいつでも表示できるようにする。

(注意事項)

私は、MacBookにpyenvでPython環境を作っているが、同様の環境の方は以下に注意。

  • tcl-tkが入っていないとTkinterは使えないこと
  • tcl-tkをインストールするにはopenssl@3が必要であること
  • tcl-tk導入前のpythonは一度削除し、tcl-tk導入後に新たにpyenvでpythonを入れ直す必要があること

参考サイト

参考にさせてもらったサイト(記事)は以下の通り。なおStream Deckへの配置は持っている人にとっては特に説明の必要もないと思うので省略。ただしStream Deckに入れ込むことでとても便利になる。

Pythonで時計アプリを作ってみた
https://qiita.com/Chihiro_0808/items/d978a671358fcaf859bb

time --- 時刻データへのアクセスと変換
http://docs.python.jp/2/library/time.html

Macでシェルスクリプトを .appアイコン化する方法
https://qiita.com/KurosawaTsuyoshi/items/425cd484e8d7759af460

動作中写真

動作中の写真は以下の通り。見やすい。文字の大きさもコードをいじることにより自由に変えられる。app化してはいるが、Pythonコードを実行するシェルスクリプトを実行しているだけなので、Pythonのシステムはコンピュータ内に存在している必要がある。その分ソースコードをいじってもautomatorでのapp作り直しは必要ないところが良いところか。

IMG_2143.jpeg

コード

コードは以下の通り。独自性はほとんどありません。時刻と日付の表示はもっと効率的にできそうな気がしますが、とりあえず私の実力ではここまで。

import tkinter as tk
import time

def show_time():
    now = time.strftime('%H:%M')
    clock1.config(text=now)
    clock1.after(1000, show_time)

def show_date():
    now = time.strftime('%a %d %b %Y')
    clock2.config(text=now)
    clock2.after(1000, show_date)

root = tk.Tk()
root.title('tk_clock')
root.geometry('180x90')
clock1 = tk.Label(root, font=('consolas', 40, 'bold'))
clock2 = tk.Label(root, font=('consolas', 20, 'bold'))
clock1.pack()
clock2.pack()
show_time()
show_date()
root.mainloop()

追記(2024.10.25 21:25)

@shiracamus(しらかみゅ)さんから、以下のコード修正案をいただきました。root.afterで再帰させればいいのですね。とてもスッキリしました。ありがとうございます。

import time
import tkinter as tk

def update():
    clock_time['text'] = time.strftime('%H:%M')
    clock_date['text'] = time.strftime('%a %d %b %Y')
    root.after(1000, update)

root = tk.Tk()
root.title('tk_clock')
root.geometry('180x90')
clock_time = tk.Label(root, font=('consolas', 40, 'bold'))
clock_time.pack()
clock_date = tk.Label(root, font=('consolas', 20, 'bold'))
clock_date.pack()
update()
root.mainloop()

以上

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?