小さな(3.5インチ)のディスプレイを入手したので、少し、GUIアプリケーションを作ろうかと思います。
2行しか表示できなかったLCDディスプレイに比べ、小さいながらも多くの情報を出力でき、しかもカラー。
表現力は段違いに広がると思います。
今回は、「定期的に表示内容を書き換える」ことが目的なので、見栄えは気にしません。
文字の大きさ、フォント、色などについては気にしません。
現在の日付、時刻を表示するのみです。
一応、書き換え処理の実施有無がわかるように、最後に"."を点滅させてみます。
Pythonプログラミング
以前作成したものを、使用していない関数を削除、定期的に書き換えるために「after」メソッドを使用しています。
多くのOSがそうですが、GUIアプリケーションはメインスレッドで動きます。
定期的な処理(書き換え)を行うためには、別スレッドで行ったりするのですが、「after」メソッドを使えば、実施間隔をmS単位で指定、「勝手に」実行してくれるイメージです。
# -*- coding: utf-8 -*- # 日本語コメントをエラーとしないように、UTF-8で保存 # 使用するライブラリのインポート import tkinter as Tk import datetime # 表示するウィンドウの幅と高さ WINDOW_WIDTH = 500 WINDOW_HEIGHT = 220 class Frame(Tk.Frame): """ フレームを生成する """ def __init__(self, master = None): # ウィンドウを作成 Tk.Frame.__init__(self, master) def setSize(self, width, height, isCenter = True): """ サイズを指定、ディスプレイ中央に表示する """ # サイズを指定した文字列 geometry = "{0}x{1}".format(width, height) if isCenter: # ディスプレイ中央に表示する # ディスプレイの幅と高さを取得 s_width = self.winfo_screenwidth() s_height = self.winfo_screenheight() # 表示する左上の座標を算出 win_left = int((s_width - width) / 2) win_top = int((s_height - height) / 2) # 表示位置を指定した文字列を追加 geometry += "+{0}+{1}".format(win_left, win_top) # サイズと表示位置を中央に指定(幅 x 高さ + 左位置 + 上位置) self.master.geometry(geometry) def setTitle(self, title): """ タイトルを指定する """ self.master.title(title) def disableMaximum(self): """ 最大化を無効化 """ self.master.resizable(False, False) class guiParts(): """ GUI部品を追加表示する すべてグリッド、左寄せで表示 """ def addLabel(self, row, column, text): """ ラベルを追加表示する """ lbl = Tk.Label(self, text = text) lbl.grid(row = row, column = column, pady = 5, padx = 20, sticky = Tk.W) return lbl def disp_clock(): """ 定期的に実行、現在時刻をラベルに表示 """ # 現在時刻の取得 now = datetime.datetime.now() global isDot dot = '.' if isDot == True else ' ' # 日時の書き換え lblClock['text'] = f'{now.strftime("%Y/%m/%d %H:%M:%S")}{dot}' isDot = not isDot # 500mS後に再帰呼出し w.after(500, disp_clock) # 継承した場合など、実行されないようにする(現状、意味は特にない) if __name__ == "__main__": global w # メインウィンドウを生成、各設定を行う w = Frame() w.setTitle('現在の日時と時刻') w.setSize(WINDOW_WIDTH, WINDOW_HEIGHT) w.disableMaximum() w.pack() # 現在日時 guiParts.addLabel(w, 0, 0, '現在の日時 時刻:') lblClock = guiParts.addLabel(w, 0, 1, 'yyyy:mm:dd hh:MM:ss') # 現在時刻を表示する isDot = False disp_clock() w.mainloop()