You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
5.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from math import *
import tkinter as t
import psutil
import os
import time
import threading
import datetime
root= t.Tk() #主窗口
root.title('任务管理器') #标题
root.geometry('730x630') #窗口尺寸
root.iconbitmap('1.ico') #窗口图标 必须是ico格式的图片
root.resizable(width=True, height=True)# 设置窗口宽度,高度可变
root.attributes('-alpha',0.9) #设置窗口透明度
root.wm_attributes('-topmost',1) #实现root窗口的置顶显示
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)
sb.pack(side='right',fill='y')
t1=t.Label(text='')
t2=t.Label(text='')
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)
def yy():
text.delete(1.0,'end')
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()+'\n\n')
root.update()
def jc():
text.delete(1.0,'end')
mm=os.popen('tasklist')
text.insert('insert',mm.read())
root.update()
def fw():
text.delete(1.0,'end')
mm=os.popen('sc query type= service')
text.insert('insert',mm.read())
root.update()
def xn():
text.delete(1.0,'end')
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','\n\n')
text.window_create('insert',window=l3)
text.window_create('insert',window=l4)
text.insert('insert','\n\n')
text.window_create('insert',window=l5)
text.window_create('insert',window=l6)
text.insert('insert','\n\n')
text.window_create('insert',window=l7)
text.window_create('insert',window=l8)
root.update()
def lw():
text.delete(1.0,'end')
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')
root.update()
def yh():
text.delete(1.0,'end')
use=' 用户'+' '+' 状态'+'\n'
text.insert('insert',use)
for y in psutil.users():
text.insert('2.0',str(y.name)+' '+'运行中。。。。'+'\n')
root.update()
m=t.Menu(root)
#文件菜单
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='关于任务管理器')
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)
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)
root.bind('<Visibility>',yy()) #当打开窗口时显示第一个按钮选项
root.bind('<Visibility>',jcs())
root.bind('<Visibility>',cpu())
root.bind('<Visibility>',wlnc())
root.configure(menu=m)
root.mainloop() #主窗口循环显示