PySimpleGUIでの時刻表示(timeoutの使い方)
はじめに
PySimpleGUIでTKのafter(一定時間ごとに繰り返し実行する。JavascriptではsetInterval)みたいなことはできないかと思ったところ、timeoutを使えばできるようでした。
そこで、TKの時刻表示のサンプルを書き換えてみました。
環境
Win10Pro
Anaconda
Python3.7
PySimpleGUIのインストールやもろもろは、以下を参照してください。
PySimpleGUIでQRコード作成GUIを作る
TKによるデジタル時計
お気楽 Python/Tkinter 入門
アナログ時計の項目の中のデジタル時計を参考にしています。
after() メソッド
今回はユーザからの入力がなくても時計を動かさないといけなので、単純なイベント駆動型アプリケーションでは「時計」を実現することはできません。
このため、プログラム自身でなんらかのきっかけを作ってやる必要があります。このような場合、役に立つメソッドが after() です。
from tkinter import *
# サンプルではTkinterとなっていますが、Python3では小文字のtkinterになります。
import time
root = Tk()
root.option_add('*font', ('FixedSys', 14))
buff = StringVar()
buff.set('')
Label(textvariable = buff).pack()
# 時刻の表示
def show_time():
buff.set(time.strftime('%I:%M:%S'))
root.after(1000, show_time)
#1000msの後にshow_time関数を呼び出しています。
show_time()
root.mainloop()
PySimpleGUIによるデジタル時計
cookbookのAsynchronous Window With Periodic Updateを参考に書いています。
cookbook Asynchronous Window With Periodic Update
import PySimpleGUI as sg
import time
def show_time():
jikan = time.strftime('%I:%M:%S')
return jikan
sg.theme('Dark')
layout= [[sg.Text(size=(8, 1), font=('Helvetica', 20),justification='center', key='-jikan-')]]
window = sg.Window('Watch',layout)
while True:
event, values = window.read(timeout=100,timeout_key='-timeout-')
#timeoutを指定することで、timeoutイベントが起こります。timeoutの単位はたぶんms
# print(event,values)
#↑コメントアウトを外すと、どんなイベントが起こっているか確かめることができます。
if event in (None,):
break
elif event in '-timeout-':
jikan = show_time()
window['-jikan-'].update(jikan)
window.close()
まとめ
一定時間ごとに繰り返し実行する(tkのafter)ことが、timeoutを設定することで、実現できました。
Author And Source
この問題について(PySimpleGUIでの時刻表示(timeoutの使い方)), 我々は、より多くの情報をここで見つけました https://qiita.com/Gyutan/items/2c61159a19073b19012b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .