1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

フォントとテーマを変えられるデジタル時計をPythonで作ってみた。

Last updated at Posted at 2022-07-27

フォントとテーマを変えられるデジタル時計

初投稿注意

作るきっかけ

インターネット上にはPythonを使ってプログラムを作る記事がたくさんある。

その中でも、私は手軽におしゃれなGUIを使ったプログラムを作りたかったためPySimpleGUIを使ったものを探していた。
そして出会ったのが「デジタル時計」である。


最初はサイトの手本どうりにプログラムを作っていったが、だんだんそれだけではつまらないと感じるようになり、考えたのがタイトルにある「フォントとテーマを変えられるデジタル時計」を作ることであった。

プログラムの中身

import PySimpleGUI as sg
from datetime import datetime
import tkinter.font

#時間を取得して返り値を返す
def now():
    ntime=datetime.now()
    nt=ntime.strftime('%H:%M:%S')
    return nt

#通常画面を作成する
def make_window(theme,cfont):
    if theme:
        sg.theme(theme)
  #通常画面のレイアウト
  #現在時刻、テーマチェンジボタン、フォントチェンジボタン、終了ボタン
    layout=[[sg.Text('',key='-time-',font=(cfont,40),justification='center')],
        [sg.Button('change theme',key='-theme-',size=(10,3))],
        [sg.Button('change clock font',key='-font-',size=(10,3))],
        [sg.Button('close',key='-close-',size=(10,3))]]

    return sg.Window('digital clock',layout,size=(300,250))    
    

def main():
    #フォントとテーマを初期設定しておく
    cfont='Times New Roman'
    theme='Black'
    wnd=make_window(theme,cfont)

    while True:
    #timeoutを設定すると時間経過でGUIを動作させることが可能になる
        event,values=wnd.read(timeout=10,timeout_key='-timeout-')
        #10ミリ秒ごとに時間取得を行う
        if event == '-timeout-':
            wnd['-time-'].update(now())
    
        if event in (sg.WIN_CLOSED,'-close-'):
            break

        #テーマチェンジボタンを押したらプルダウンメニュー付きのウィンドウを開く
        if event == '-theme-':
            #layout and window create
            event,values = sg.Window('Theme Browser',
            [[sg.Text('theme browsing')],
            [sg.Text('click theme color')],
            [sg.Combo(values=sg.theme_list(),size=(20,12),key='-LIST-',readonly=True)],
            [sg.OK(),sg.Cancel()]]).read(close=True)

            #選択してOKを押したらテーマの値を変更してmake_window関数に渡す
            if event == 'OK':
                theme=values['-LIST-']
                wnd.close()
                wnd= make_window(theme,cfont) 
        #フォントチェンジボタンが押されたらこちらも同様のウィンドウを開く
        if event == '-font-':
            #layout and window create
            event,values = sg.Window('Font Browser',
            [[sg.Text('Font browsing')],
            [sg.Text('click font')],
            [sg.Combo(values=tkinter.font.families(),size=(20,12),key='-FONT-',readonly=True)],
            # or
            [sg.Combo(values=sg.Text.fonts_installed_list(),size=(20,12),key='-FONT-',readonly=True)],
            [sg.OK(),sg.Cancel()]]).read(close=True)

            #フォントの値を変えて渡す
            if event == 'OK':
                cfont=values['-FONT-']
                wnd.close()
                wnd= make_window(theme,cfont)
                
            
    wnd.close()

if __name__ == '__main__':
    main()

補足

フォントの表示にはPySimpleGUIだけでは対応できないため、tkinter.font.families()をプルダウンメニューの値に入れている。
PySimpleGUI公式さんがTwitter上でsg.Text.fonts_installed_list()の存在を教えてくれました。

参考サイト↓

デジタル時計の作り方で参考にした。

フォント一覧の取得方法

テーマを変えるための方法例が載っていてプログラム作成の際にかなり参考になった。
(注意:英語のサイト)

1
1
0

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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?