美文网首页我爱编程
Day18psutil&图形界面

Day18psutil&图形界面

作者: 林清猫耳 | 来源:发表于2018-04-11 22:02 被阅读25次

psutil

用Python来编写脚本简化日常的运维工作是Python的一个重要用途。
在Python中获取系统信息的一个好办法是使用psutil这个第三方模块。顾名思义,psutil = process and system utilities,它不仅可以通过一两行代码实现系统监控,还可以跨平台使用,支持Linux/UNIX/OSX/Windows等,是系统管理员和运维小伙伴不可或缺的必备模块。

获取CPU信息

>>> import psutil
>>> psutil.cpu_count() # CPU逻辑数量
8
>>> psutil.cpu_count(logical=False) # CPU物理核心
4
# 4说明是4核超线程, 8则是8核非超线程

统计CPU的用户/系统/空闲时间:

>>> psutil.cpu_times()
>>> scputimes(user=229289.53125, system=132089.0, idle=4802985.0, interrupt=5994.125030517578, dpc=5266.125)

获取内存信息

使用psutil获取物理内存和交换内存信息,分别使用:

# 返回的是字节为单位的整数
>>> psutil.virtual_memory()
svmem(total=8512647168, available=4071849984, percent=52.2, used=4440797184, free=4071849984)
>>> psutil.swap_memory()
sswap(total=9049518080, used=5464526848, free=3584991232, percent=60.4, sin=0, sout=0)

获取磁盘信息

>>> psutil.disk_partitions()  # 磁盘分区信息
[sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed')]
>>> psutil.disk_usage('/')  # 磁盘使用情况
sdiskusage(total=119070531584, used=73445441536, free=45625090048, percent=61.7)
>>> 45625090048/(2**30)
42.491676330566406  # GB
>>> psutil.disk_io_counters()  # 磁盘IO
sdiskio(read_count=7417512, write_count=5075323, read_bytes=170990955520, write_bytes=143101932032, read_time=9873, write_time=5668)

图形界面

Python支持多种图形界面的第三方库,包括:

  • Tk
  • wxWidgets
  • Qt
  • GTK

Tkinter

我们编写的Python代码会调用内置的Tkinter,Tkinter封装了访问Tk的接口;
Tk是一个图形库,支持多个操作系统,使用Tcl语言开发;
Tk会调用操作系统提供的本地GUI接口,完成最终的GUI。
所以,我们的代码只需要调用Tkinter提供的接口就可以了。

第一个GUI程序

  • 导入Tkinter包的所有内容,从Frame派生一个Application类,这是所有Widget的父容器:
from tkinter import *
class Application(Frame):
    def __init__(self,master=None):
        Frame.__init__(self,master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.helloLabel = Label(self, text='Hello, World!')
        self.helloLabel.pack()
        self.quitButton = Button(self, text='Quit', command=self.quit)
        self.quitButton.pack()

在GUI中,每个Button、Label、输入框等,都是一个Widget。Frame则是可以容纳其他Widget的Widget,所有的Widget组合起来就是一棵树。
pack()方法把Widget加入到父容器中,并实现布局。pack()是最简单的布局,grid()可以实现更复杂的布局。
createWidgets()方法中,我们创建一个Label和一个Button,当Button被点击时,触发self.quit()使程序退出。

  • 实例化Application,并启动消息循环:
app = Application()
# 设置窗口标题:
app.master.title('Hello World')
# 主消息循环:
app.mainloop()

输入文本

我们再对这个GUI程序改进一下,加入一个文本框,让用户可以输入文本,然后点按钮后,弹出消息对话框。

from tkinter import *
import tkinter.messagebox as messagebox

class Application(Frame):
    def __init__(self,master=None):
        Frame.__init__(self,master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.nameInput = Entry(self)
        self.nameInput.pack()
        self.quitButton = Button(self, text='Helo', command=self.hello)
        self.quitButton.pack()
    def hello(self):
        name = self.nameInput.get() or 'World!'
        messagebox.showinfo('Message','Hello, %s' % name)
        
app = Application()
# 设置窗口标题:
app.master.title('Hello, World!')
# 主消息循环:
app.mainloop()

当用户点击按钮时,触发hello(),通过self.nameInput.get()获得用户输入的文本后,使用tkMessageBox.showinfo()可以弹出消息对话框。

GUI回调

import tkinter as tk

def callback():
    """
    callback function for button click
    """
    listbox.insert(tk.END,"Hello World!")


if __name__ == "__main__":
    master = tk.Tk()

    button = tk.Button(master,text="OK",command=callback)
    button.pack()

    listbox = tk.Listbox(master)
    listbox.pack()
    tk.mainloop()
GUI回调

相关文章

网友评论

    本文标题:Day18psutil&图形界面

    本文链接:https://www.haomeiwen.com/subject/uybzhftx.html