
來(lái)源:Python爬蟲(chóng)與數(shù)據(jù)挖掘
作者:Python進(jìn)階者
大家好,我是Python進(jìn)階者。
前言
相信大家對(duì)任務(wù)管理器都不是很陌生了,Ctrl+Alt+Del即可打開(kāi),然后點(diǎn)擊啟動(dòng)任務(wù)管理器,或者右擊任務(wù)欄-啟動(dòng)任務(wù)管理器即可啟動(dòng)任務(wù)管理器,啟動(dòng)之后界面如下:
可以看出它列舉出了一些重要的參數(shù),比如進(jìn)程數(shù)量,CPU使用率,物理內(nèi)存,接下來(lái)我們就來(lái)一一列舉出來(lái)。
編輯器:sublime text 3
模塊:psutil tkinter
1、編寫(xiě)主界面
要想實(shí)現(xiàn)任務(wù)管理器,首先我們寫(xiě)一個(gè)界面出來(lái),這里我們運(yùn)用tkinter編寫(xiě)個(gè)界面出來(lái):
2、編寫(xiě)菜單欄
我們先實(shí)現(xiàn)下它的菜單欄,這里用到tkinter的Menu模塊,不知道大家有沒(méi)有印象,那么開(kāi)始吧。
1)首先我們需要?jiǎng)?chuàng)建一個(gè)主菜單,然后將各個(gè)子菜單裝進(jìn)去:
m=t.Menu(root)
2)創(chuàng)建各個(gè)子菜單:
#文件菜單 file=t.Menu(m,tearoff=False)
m.add_cascade(label='文件', menu=file)
file.add_command(label='新建任務(wù)',accelerator='(N)')
file.add_command(label='退出任務(wù)欄管理器',command=root.quit,accelerator='(x)') #選項(xiàng)菜單 ii=t.IntVar()
ii.set(1)
o=t.Menu(m,tearoff=False)
m.add_cascade(label='選項(xiàng)',menu=o)
o.add_radiobutton(label='前端顯示',variable=ii, value=0)
o.add_radiobutton(label='使用時(shí)最小化',variable=ii, value=1)
o.add_radiobutton(label='最小化時(shí)隱藏',variable=ii, value=2) #查看菜單 v=t.Menu(m,tearoff=False)
m.add_cascade(label='查看',menu=v)
v.add_command(label='立即刷新') #二級(jí)菜單 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='選項(xiàng)列') #幫助菜單 h=t.Menu(m,tearoff=False)
m.add_cascade(label='幫助',menu=h)
h.add_command(label='任務(wù)管理器幫助主體')
h.add_command(label='關(guān)于任務(wù)管理器')
3)將菜單添加到主界面配置中
root.configure(menu=m)
最后結(jié)果圖,可以看到,基本和任務(wù)管理器差不多。
3、界面中的功能
界面寫(xiě)完了我們?cè)撓蚪缑嫣砑咏M件了,由任務(wù)管理器那張圖我們可以看到它有一個(gè)切換任務(wù)窗口的按鈕:
1)編寫(xiě)按鈕
b1=t.Button(root,text='應(yīng)用程序',command=yy)
b2=t.Button(root,text='進(jìn)程',command=jc)
b3=t.Button(root,text='服務(wù)',command=fw)
b4=t.Button(root,text='性能',command=xn)
b5=t.Button(root,text='聯(lián)網(wǎng)',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)編寫(xiě)多行文本框
text=t.Text(root,width=100,height=40) text.place(x=10,y=36)
3)編寫(xiě)函數(shù)實(shí)現(xiàn)簡(jiǎn)單功能
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')
這樣就實(shí)現(xiàn)了不同按鈕之間切換不同的界面。
4)編寫(xiě)下面的進(jìn)程數(shù),CPU使用率,物理內(nèi)存
我們使用標(biāo)簽來(lái)放置這些參數(shù),因?yàn)檫@三項(xiàng)的參數(shù)是可變的,所以暫時(shí)只寫(xiě)前面名字:
t1=t.Label(text='進(jìn)程數(shù):')
t2=t.Label(text='CPU 使用率:')
t3=t.Label(text='物理內(nèi)存:')
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)給多行文本框添加滾動(dòng)條
我們可以使用模塊Scrollbar來(lái)實(shí)現(xiàn),安裝滾動(dòng)條之前需要做兩件事情:
1.指定該組件的yscrollbarcommand參數(shù)為Scrollbar的set()方法
2.指定Scrollbar 的 command 參數(shù)為該組件的 yview() 方法
接下來(lái)我們實(shí)現(xiàn)它:
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) #文本框內(nèi)容隨滾動(dòng)條滾動(dòng) text.config(yscrollcommand=sb.set(0.1,0.3)) #Y軸填充
6)添加狀態(tài)欄文本標(biāo)簽
t1=t.Label(text='') t2=t.Label(text='') t3=t.Label(text='')
(注:這里只是隱藏部件,萬(wàn)不可用destroy銷(xiāo)毀部件)
7)實(shí)現(xiàn)狀態(tài)欄標(biāo)簽功能
現(xiàn)在我們來(lái)實(shí)現(xiàn)這三個(gè)標(biāo)簽的內(nèi)容。想必大家剛剛應(yīng)該看到了,上面的標(biāo)簽沒(méi)有設(shè)置任何內(nèi)容,那么這是為什么呢?我們都知道,一旦你把內(nèi)容添加進(jìn)去,它就會(huì)緊隨其后并不會(huì)覆蓋,所以初始值必須是空,才不至于不能覆蓋值。那么我們來(lái)看下具體實(shí)現(xiàn)過(guò)程吧。
def jcs(): t1.configure(text='進(jìn)程數(shù):'+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 #剩余內(nèi)存 t=psutil.virtual_memory().total#總內(nèi)存 wl= float(t-f)/float(t) #為使得最后值更精確,必須用float t3.configure(text='物理內(nèi)存:'+str(floor(wl*100))+'%')
root.after(2000,wlnc)
這里的三個(gè)函數(shù)就是分別實(shí)現(xiàn)上面的三個(gè)功能的,最后將它添加到窗口事件即可。
8)功能編寫(xiě)
可以看到這頁(yè)主要是系統(tǒng)運(yùn)行的一些應(yīng)用程序的名字,所以我們可以這樣這里我們需要用到模塊psutil 來(lái)獲取系統(tǒng)的關(guān)鍵參數(shù)。
1.編寫(xiě)應(yīng)用程序選項(xiàng)
應(yīng)用程序選項(xiàng)包含進(jìn)程號(hào)和進(jìn)程名和進(jìn)程文件路徑,所以可以用psutil進(jìn)行獲取,方法如下:
text.insert('insert','進(jìn)程號(hào) '+'進(jìn)程名 '+' 進(jìn)程文件路徑'+'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')
這樣就可以將這些內(nèi)容添加進(jìn)來(lái)了。
2.編寫(xiě)進(jìn)程選項(xiàng)
這里我們可以投機(jī)取巧,使用cmd中的tasklist命令,它可以打印出當(dāng)前系統(tǒng)所有在運(yùn)行的進(jìn)程的信息。
mm=os.popen('tasklist')
text.insert('insert',mm.read())
3.編寫(xiě)服務(wù)選項(xiàng)
也是使用cmd中的sc 命令,它相當(dāng)于一個(gè)掃描器,可以得到很多有用的信息。
mm=os.popen('sc query type= service')
text.insert('insert',mm.read())
4.編寫(xiě)性能選項(xiàng)
這個(gè)內(nèi)容會(huì)比較多點(diǎn),因?yàn)槲覀円玫奖容^多的參數(shù)和把組件放在多行文本框中,于是增加了一些冗余代碼:
l1=t.Label(root,text='開(kāi)機(jī)時(shí)間:') 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='當(dāng)前時(shí)間:')
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='物理內(nèi)存使用情況(MB):')
l6=t.Label(root,text='')
jh=psutil.virtual_memory() #物理內(nèi)存 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='交換內(nèi)存使用情況(MB):')
l8=t.Label(root,text='')
hj=psutil.swap_memory() #交換內(nèi)存 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.編寫(xiě)聯(lián)網(wǎng)選項(xiàng)
這里我們只獲取網(wǎng)卡的收發(fā)流量,因此:
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','網(wǎng)卡接收流量: '+str(r)+'n'+'網(wǎng)卡發(fā)送流量:'+str(s)+'n')
6.編寫(xiě)用戶選項(xiàng)
這里我們需要獲取當(dāng)前的用戶數(shù):
use=' 用戶'+' '+' 狀態(tài)'+'n' text.insert('insert',use) for y in psutil.users():
text.insert('2.0',str(y.name)+' '+'運(yùn)行中。。。。'+'n')
這樣就完成了任務(wù)管理器的編寫(xiě)了。
通過(guò)對(duì)任務(wù)管理器的了解,使我們認(rèn)識(shí)到了系統(tǒng)中的一些至關(guān)重要的信息,比如說(shuō)通過(guò)進(jìn)程名可以獲取進(jìn)程號(hào),通過(guò)進(jìn)程號(hào)可以獲取進(jìn)程名,cmd命令的用法,可以說(shuō)是相當(dāng)親民了,希望本文可以幫到大家。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類(lèi)型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類(lèi)型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門(mén)控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書(shū)考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開(kāi)啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03