
來源:Python爬蟲與數據挖掘
作者:Python進階者
大家好,我是Python進階者。
前言
相信大家對任務管理器都不是很陌生了,Ctrl+Alt+Del即可打開,然后點擊啟動任務管理器,或者右擊任務欄-啟動任務管理器即可啟動任務管理器,啟動之后界面如下:
可以看出它列舉出了一些重要的參數,比如進程數量,CPU使用率,物理內存,接下來我們就來一一列舉出來。
編輯器:sublime text 3
模塊:psutil tkinter
1、編寫主界面
要想實現任務管理器,首先我們寫一個界面出來,這里我們運用tkinter編寫個界面出來:
2、編寫菜單欄
我們先實現下它的菜單欄,這里用到tkinter的Menu模塊,不知道大家有沒有印象,那么開始吧。
1)首先我們需要創建一個主菜單,然后將各個子菜單裝進去:
m=t.Menu(root)
2)創建各個子菜單:
#文件菜單 file=t.Menu(m,tearoff=False)
m.add_cascade(label='文件', menu=file)
file.add_command(label='新建任務',accelerator='(N)')
file.add_command(label='退出任務欄管理器',command=root.quit,accelerator='(x)') #選項菜單 ii=t.IntVar()
ii.set(1)
o=t.Menu(m,tearoff=False)
m.add_cascade(label='選項',menu=o)
o.add_radiobutton(label='前端顯示',variable=ii, value=0)
o.add_radiobutton(label='使用時最小化',variable=ii, value=1)
o.add_radiobutton(label='最小化時隱藏',variable=ii, value=2) #查看菜單 v=t.Menu(m,tearoff=False)
m.add_cascade(label='查看',menu=v)
v.add_command(label='立即刷新') #二級菜單 iv=t.IntVar()
iv.set(1)
s=t.Menu(v,tearoff=False)
v.add_cascade(label='更新速度',menu=s)
s.add_radiobutton(label='高',variable=iv, value=0)
s.add_radiobutton(label='普通',variable=iv, value=1)
s.add_radiobutton(label='低',variable=iv, value=2)
s.add_radiobutton(label='暫停',variable=iv, value=3)
v.add_command(label='選項列') #幫助菜單 h=t.Menu(m,tearoff=False)
m.add_cascade(label='幫助',menu=h)
h.add_command(label='任務管理器幫助主體')
h.add_command(label='關于任務管理器')
3)將菜單添加到主界面配置中
root.configure(menu=m)
最后結果圖,可以看到,基本和任務管理器差不多。
3、界面中的功能
界面寫完了我們該向界面添加組件了,由任務管理器那張圖我們可以看到它有一個切換任務窗口的按鈕:
1)編寫按鈕
b1=t.Button(root,text='應用程序',command=yy)
b2=t.Button(root,text='進程',command=jc)
b3=t.Button(root,text='服務',command=fw)
b4=t.Button(root,text='性能',command=xn)
b5=t.Button(root,text='聯網',command=lw)
b6=t.Button(root,text='用戶',command=yh) #定位 b1.place(x=10,y=15,height=20,width=60)
b2.place(x=70,y=15,height=20,width=60)
b3.place(x=130,y=15,height=20,width=60)
b4.place(x=190,y=15,height=20,width=60)
b5.place(x=250,y=15,height=20,width=60)
b6.place(x=310,y=15,height=20,width=60)
2)編寫多行文本框
text=t.Text(root,width=100,height=40) text.place(x=10,y=36)
3)編寫函數實現簡單功能
def yy(): text.delete(1.0,'end') text.insert('insert','yy') def jc(): text.delete(1.0,'end') text.insert('insert','jc') def fw(): text.delete(1.0,'end') text.insert('insert','fw') def xn(): text.delete(1.0,'end') text.insert('insert','xn') def lw(): text.delete(1.0,'end') text.insert('insert','lw') def yh(): text.delete(1.0,'end') text.insert('insert','yh')
這樣就實現了不同按鈕之間切換不同的界面。
4)編寫下面的進程數,CPU使用率,物理內存
我們使用標簽來放置這些參數,因為這三項的參數是可變的,所以暫時只寫前面名字:
t1=t.Label(text='進程數:')
t2=t.Label(text='CPU 使用率:')
t3=t.Label(text='物理內存:')
t1.place(x=10,y=580,width=120)
t2.place(x=150,y=580,width=120)
t3.place(x=300,y=580,width=120)
5)給多行文本框添加滾動條
我們可以使用模塊Scrollbar來實現,安裝滾動條之前需要做兩件事情:
1.指定該組件的yscrollbarcommand參數為Scrollbar的set()方法
2.指定Scrollbar 的 command 參數為該組件的 yview() 方法
接下來我們實現它:
sb=t.Scrollbar(root)
sb.pack(side='left',fill='y')
text=t.Text(root,width=100,height=40)
text.place(x=10,y=36)
sb.config(command=text.yview) #文本框內容隨滾動條滾動 text.config(yscrollcommand=sb.set(0.1,0.3)) #Y軸填充
6)添加狀態欄文本標簽
t1=t.Label(text='') t2=t.Label(text='') t3=t.Label(text='')
(注:這里只是隱藏部件,萬不可用destroy銷毀部件)
7)實現狀態欄標簽功能
現在我們來實現這三個標簽的內容。想必大家剛剛應該看到了,上面的標簽沒有設置任何內容,那么這是為什么呢?我們都知道,一旦你把內容添加進去,它就會緊隨其后并不會覆蓋,所以初始值必須是空,才不至于不能覆蓋值。那么我們來看下具體實現過程吧。
def jcs(): t1.configure(text='進程數:'+str(len(psutil.pids())))
root.after(3000,jcs) def cpu(): pp=str(ceil(psutil.cpu_percent(1)))
t2.configure(text='CPU 使用率:'+pp+'%')
root.after(1500,cpu) def wlnc(): f= psutil.virtual_memory().free #剩余內存 t=psutil.virtual_memory().total#總內存 wl= float(t-f)/float(t) #為使得最后值更精確,必須用float t3.configure(text='物理內存:'+str(floor(wl*100))+'%')
root.after(2000,wlnc)
這里的三個函數就是分別實現上面的三個功能的,最后將它添加到窗口事件即可。
8)功能編寫
可以看到這頁主要是系統運行的一些應用程序的名字,所以我們可以這樣這里我們需要用到模塊psutil 來獲取系統的關鍵參數。
1.編寫應用程序選項
應用程序選項包含進程號和進程名和進程文件路徑,所以可以用psutil進行獲取,方法如下:
text.insert('insert','進程號 '+'進程名 '+' 進程文件路徑'+'n') for y in psutil.pids():
a=psutil.Process(y) if a.name()=='System Idle Process': continue else:
text.insert('insert',str(y)+' '+a.name()+' '+a.exe()+'nn')
這樣就可以將這些內容添加進來了。
2.編寫進程選項
這里我們可以投機取巧,使用cmd中的tasklist命令,它可以打印出當前系統所有在運行的進程的信息。
mm=os.popen('tasklist')
text.insert('insert',mm.read())
3.編寫服務選項
也是使用cmd中的sc 命令,它相當于一個掃描器,可以得到很多有用的信息。
mm=os.popen('sc query type= service')
text.insert('insert',mm.read())
4.編寫性能選項
這個內容會比較多點,因為我們要得到比較多的參數和把組件放在多行文本框中,于是增加了一些冗余代碼:
l1=t.Label(root,text='開機時間:') tm=datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
l2=t.Label(root,text=str(tm))
l3=t.Label(root,text='當前時間:')
l4=t.Label(root,text='')
dq=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
l4.configure(text=str(dq))
l5=t.Label(root,text='物理內存使用情況(MB):')
l6=t.Label(root,text='')
jh=psutil.virtual_memory() #物理內存 tt=int((jh.total)/1024/1024) #總量 us=int((jh.used)/1024/1024) #使用量 fr=int((jh.free)/1024/1024) #剩余量 l6.configure(text='總量:' + str(tt) +'n'+'使用:'+str(us) +'n'+'剩余:'+str(fr))
l7=t.Label(root,text='交換內存使用情況(MB):')
l8=t.Label(root,text='')
hj=psutil.swap_memory() #交換內存 ht=int((hj.total)/1024/1024)
hu=int((hj.used)/1024/1024)
hf=int((hj.free)/1024/1024)
l8.configure(text='總量:' + str(ht) + ' '+'使用:'+str(hu) +' '+'剩余:'+str(hf))
text.window_create('insert',window=l1) #添加組件到多行文本框 text.window_create('insert',window=l2)
text.insert('insert','nn')
text.window_create('insert',window=l3)
text.window_create('insert',window=l4)
text.insert('insert','nn')
text.window_create('insert',window=l5)
text.window_create('insert',window=l6)
text.insert('insert','nn')
text.window_create('insert',window=l7)
text.window_create('insert',window=l8)
5.編寫聯網選項
這里我們只獲取網卡的收發流量,因此:
n = psutil.net_io_counters()
r=str(float(n.bytes_recv / 1024 / 1024))+'MB'
s= str(float(n.bytes_sent / 1024 / 1024))+'MB'
text.insert('insert','網卡接收流量: '+str(r)+'n'+'網卡發送流量:'+str(s)+'n')
6.編寫用戶選項
這里我們需要獲取當前的用戶數:
use=' 用戶'+' '+' 狀態'+'n' text.insert('insert',use) for y in psutil.users():
text.insert('2.0',str(y.name)+' '+'運行中。。。。'+'n')
這樣就完成了任務管理器的編寫了。
通過對任務管理器的了解,使我們認識到了系統中的一些至關重要的信息,比如說通過進程名可以獲取進程號,通過進程號可以獲取進程名,cmd命令的用法,可以說是相當親民了,希望本文可以幫到大家。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25