前回の記事では、Pythonを使用してラズベリーパイのCPU温度を連続監視するプログラムを作成しました。
今回はそのプログラムをGUI化して監視するプログラムを作成していきたいと思います。GUI化には特になにも準備しなくても使用できるので「tkinter」ライブラリを利用します。
今回作ったプログラムの全容
tkinterの呼び方はわかりませんが、私は「Tキンター」と呼んでいます。(そう呼ぶと、綴りが覚えやすいです)
今回作ったプログラムは表のとおりです。下のほうに解説を記載しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
import subprocess import time import tkinter as tk win = tk.Tk() win.geometry("300x50") win.title("CPU温度の監視") label1 = tk.Label(win,text=" CPUの温度 = ") label1.pack(side=tk.LEFT) tempvar = tk.StringVar() tempvar.set("st") label2 = tk.Label(win,textvariable=tempvar) label2.pack(side=tk.LEFT) label3 = tk.Label(win,text=" ℃") label3.pack(side=tk.LEFT) cut = 0 while cut < 86400: #Ends after 24 hours cut = cut + 1 time.sleep(1) #Wait for 1 second args = ['cat','/sys/class/thermal/thermal_zone0/temp'] temp = subprocess.run(args,stdout=subprocess.PIPE,encoding='utf8') temp = round(int(temp.stdout)/1000,1) tempvar.set(temp) win.update_idletasks() else: tempvar.set("END") win.update_idletasks() win.mainloop() |
プログラムの解説
subprocessとtimeについては、前回の記事で解説しています。
(3行目)import tkinter as tk
「import tkinter as tk」でtkinterライブラリを読みだしています。毎回tkinterと記入するのは大変なので「as tk」を追加して、tk=tkinterとする記述としています。なお、importではなく、fromで読みだすと「tk」すら省略可能のようですが、まだ理解不足ですので今回は使いません。
(5行目)win = tk.Tk()
「win」という名前のtkinterウインドウを作成します。また、「win.geometry(“300×50”)」でウインドウサイズの指定、「win.title(“CPU温度の監視”)」でウインドウのタイトルを記述しています。
(10行目)label
laber1~3をpacで左から順番に配置するように指定しています。label2だけは「StringVar」で記述内容を更新できるように工夫しています。最初は”st”という適当な文字を入れていますが、あとでwhile文の中の「tempvar.set(temp)」でcpu温度を入力するように指定しています。
(31行目)win.update_idletasks()
winの記載をアップデートする命令です。while文との組み合わせにより、1秒に1回ラベルを更新させています。
また、while文の最後にも「win.update_idletasks()」をもう一度記載していますが、24時間経過してwhileから抜けた後に「END」と表示するように指定しています。
(36行目)win.mainloop()
一番最初に記述した「win = tk.Tk()」に対して、最後に記述することでウインドウが作られます。
プログラムを実行
今回作ったプログラムを実行するとこのようになります。
真ん中の「34.6」と記載されている部分が1秒に1回更新されます。
次回
次回は、取得したCPU温度の情報をもとに、CPUファンの回転数を制御できるようにしたいのですが、調べたり覚えたりすることが沢山ありますので、更新には時間がかかりそうです。