0
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:CPU使用率グラフを作る(2)

Last updated at Posted at 2025-01-03

(2025.01.04) コード修正

前回記事に続いて、小さいタイプのCPU使用率グラフを作ってみた。

前回記事は以下の通り。これは Mac 標準のアクティビティモニタの CPU history に相当するものであった。

Python tkinter:CPU使用率グラフを作る(1)

下の写真において、前回作ったものが、縦長の60秒間の履歴を示すもので、今回作成したものが時計の横にある小さいタイプのものである。これは履歴は示さず、その時々でどのCPUが動いているかを示すもの。利用率の表示には8個の Progressbar を用いている。これは Mac 標準のアクティビティモニタの CPU usage に相当するものである。

環境は以下の通り。

MacBook Pro 14"
Chip Apple M1 Pro (8-core CPU, 14-core GPU)
Memory 16GB
Storage 512GB SSD
macOS Sequoia 15.2
Python 3.13.1
Tcl/Tk 9.0.1

軽い処理

Screenshot 2025-01-04 at 16.46.48.png

並列処理により全コア使用

Screenshot 2025-01-04 at 17.08.02.png

小さいものと大きなもので、数値が異なっているが、これはスタートのタイミングのずれによるものと思われる、厳密な数値を問題にするソフトでもないので大体同じ数値が出ていれば良しとする。

コードは以下の通り。

import tkinter as tk
from tkinter import ttk
import numpy as np
import psutil


def update():
    global root,lb2,val,mlb
    r=psutil.cpu_percent(interval=1, percpu=True)
    for k in range(0,len(r)):
        lb2[k]['text']='{0:.1f}'.format(r[k])
        val[k]['value']=r[k]
    mlb[1]['text']='{0:6.1f}%'.format(sum(r)/len(r))
    mlb[3]['text']='{0:6.1f}%'.format(psutil.virtual_memory().percent)
    root.after(1000, update)


def main():
    global root,lb2,val,mlb

    # basin parameter
    nc=psutil.cpu_count() # number pf cores
    cpu=[]
    for i in range(0,nc):
        s='P'  # performance core
        if 0<=i<=1: s='E' # efficiency core
        cpu.append('{0}-{1}'.format(i+1,s))

    # GUI
    root =tk.Tk()
    root.resizable(False,False)
    root.title('CPU & Mem')
    style=ttk.Style()
    style.theme_use('alt')
    fontn='Calibri 10'
    fontb='Calibri 12 bold'
    style.configure('.',font=(fontn))
    style.configure('.',background='#393939',foreground='#ffffff')
    style.configure('Horizontal.TProgressbar', background='#999999')
    style.configure('Horizontal.TProgressbar', troughcolor='#0f0f0f')
    style.configure("Horizontal.TProgressbar", bordercolor='#393939')

    frame0=ttk.Frame(root)
    lb1=np.empty(nc,dtype=object)
    lb2=np.empty(nc,dtype=object)
    val=np.empty(nc,dtype=object)
    for k in range(0,nc):
        lb1[k]=ttk.Label(frame0,text=cpu[k],borderwidth=0,relief=tk.SOLID,anchor=tk.CENTER,width=3)
        lb2[k]=ttk.Label(frame0,text='',borderwidth=0,relief=tk.SOLID,anchor=tk.CENTER,width=5)
        val[k]=ttk.Progressbar(frame0,orient='horizontal',length=70,maximum=100,mode='determinate')
        lb1[k].grid(row=k,column=0)
        lb2[k].grid(row=k,column=1)
        val[k].grid(row=k,column=2)
    frame0.pack()

    frame1=ttk.Frame(root)
    nn=4
    mlb=np.empty(nn,dtype=object)
    txt=['CPU','','MEM','']
    for k in range(0,len(mlb)):
        mlb[k]=ttk.Label(frame1,text=txt[k],borderwidth=1,relief=tk.SOLID,anchor=tk.CENTER,width=7,font=(fontb))
        i,j=k//2,k%2
        mlb[k].grid(row=i,column=j)
    frame1.pack()

    update()

    root.mainloop()


if __name__ == '__main__': main()

以 上

0
0
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
0
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?