
來源:Python爬蟲與數(shù)據(jù)挖掘
作者:Python進階者
大家好,我是Python進階者。
前言
相信大家對任務(wù)管理器都不是很陌生了,Ctrl+Alt+Del即可打開,然后點擊啟動任務(wù)管理器,或者右擊任務(wù)欄-啟動任務(wù)管理器即可啟動任務(wù)管理器,啟動之后界面如下:
可以看出它列舉出了一些重要的參數(shù),比如進程數(shù)量,CPU使用率,物理內(nèi)存,接下來我們就來一一列舉出來。
編輯器:sublime text 3
模塊:psutil tkinter
1、編寫主界面
要想實現(xiàn)任務(wù)管理器,首先我們寫一個界面出來,這里我們運用tkinter編寫個界面出來:
2、編寫菜單欄
我們先實現(xiàn)下它的菜單欄,這里用到tkinter的Menu模塊,不知道大家有沒有印象,那么開始吧。
1)首先我們需要創(chuàng)建一個主菜單,然后將各個子菜單裝進去:
m=t.Menu(root)
2)創(chuàng)建各個子菜單:
#文件菜單 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)') #選項菜單 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='任務(wù)管理器幫助主體')
h.add_command(label='關(guān)于任務(wù)管理器')
3)將菜單添加到主界面配置中
root.configure(menu=m)
最后結(jié)果圖,可以看到,基本和任務(wù)管理器差不多。
3、界面中的功能
界面寫完了我們該向界面添加組件了,由任務(wù)管理器那張圖我們可以看到它有一個切換任務(wù)窗口的按鈕:
1)編寫按鈕
b1=t.Button(root,text='應(yīng)用程序',command=yy)
b2=t.Button(root,text='進程',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)編寫多行文本框
text=t.Text(root,width=100,height=40) text.place(x=10,y=36)
3)編寫函數(shù)實現(xià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')
這樣就實現(xiàn)了不同按鈕之間切換不同的界面。
4)編寫下面的進程數(shù),CPU使用率,物理內(nèi)存
我們使用標(biāo)簽來放置這些參數(shù),因為這三項的參數(shù)是可變的,所以暫時只寫前面名字:
t1=t.Label(text='進程數(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)給多行文本框添加滾動條
我們可以使用模塊Scrollbar來實現(xiàn),安裝滾動條之前需要做兩件事情:
1.指定該組件的yscrollbarcommand參數(shù)為Scrollbar的set()方法
2.指定Scrollbar 的 command 參數(shù)為該組件的 yview() 方法
接下來我們實現(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)容隨滾動條滾動 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='')
(注:這里只是隱藏部件,萬不可用destroy銷毀部件)
7)實現(xiàn)狀態(tài)欄標(biāo)簽功能
現(xiàn)在我們來實現(xiàn)這三個標(biāo)簽的內(nèi)容。想必大家剛剛應(yīng)該看到了,上面的標(biāo)簽沒有設(shè)置任何內(nèi)容,那么這是為什么呢?我們都知道,一旦你把內(nèi)容添加進去,它就會緊隨其后并不會覆蓋,所以初始值必須是空,才不至于不能覆蓋值。那么我們來看下具體實現(xiàn)過程吧。
def jcs(): t1.configure(text='進程數(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)
這里的三個函數(shù)就是分別實現(xiàn)上面的三個功能的,最后將它添加到窗口事件即可。
8)功能編寫
可以看到這頁主要是系統(tǒng)運行的一些應(yīng)用程序的名字,所以我們可以這樣這里我們需要用到模塊psutil 來獲取系統(tǒng)的關(guān)鍵參數(shù)。
1.編寫應(yīng)用程序選項
應(yīng)用程序選項包含進程號和進程名和進程文件路徑,所以可以用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')
這樣就可以將這些內(nèi)容添加進來了。
2.編寫進程選項
這里我們可以投機取巧,使用cmd中的tasklist命令,它可以打印出當(dāng)前系統(tǒng)所有在運行的進程的信息。
mm=os.popen('tasklist')
text.insert('insert',mm.read())
3.編寫服務(wù)選項
也是使用cmd中的sc 命令,它相當(dāng)于一個掃描器,可以得到很多有用的信息。
mm=os.popen('sc query type= service')
text.insert('insert',mm.read())
4.編寫性能選項
這個內(nèi)容會比較多點,因為我們要得到比較多的參數(shù)和把組件放在多行文本框中,于是增加了一些冗余代碼:
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='當(dāng)前時間:')
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.編寫聯(lián)網(wǎ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.編寫用戶選項
這里我們需要獲取當(dāng)前的用戶數(shù):
use=' 用戶'+' '+' 狀態(tài)'+'n' text.insert('insert',use) for y in psutil.users():
text.insert('2.0',str(y.name)+' '+'運行中。。。。'+'n')
這樣就完成了任務(wù)管理器的編寫了。
通過對任務(wù)管理器的了解,使我們認識到了系統(tǒng)中的一些至關(guān)重要的信息,比如說通過進程名可以獲取進程號,通過進程號可以獲取進程名,cmd命令的用法,可以說是相當(dāng)親民了,希望本文可以幫到大家。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學(xué)領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學(xué)計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學(xué)計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務(wù)價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導(dǎo)向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10