Python PyQt5实战项目之网速监控器的实现

目录
  • 简介
  • psutil模块使用
  • 主界面
  • 网速线程
  • 全部代码
  • 成果展示

简介

看到了一个能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息的模块–psutil模块。这次利用psutil.net_io_counters()这个方法。

psutil模块使用

>>> psutil.net_io_counters() # 获取网络读写字节/包的个数

snetio(bytes_sent=16775953, bytes_recv=712657945, packets_sent=216741, packets_recv=485775, errin=0, errout=0, dropin=0, dropout=0)

bytes_sent:上传数据
bytes_recv: 接收数据

主界面

class NetWindows(QMainWindow):
    net_signal = pyqtSignal(str,str)
    def __init__(self):
        super(NetWindows,self).__init__()
        self.ui_init()
        self.thread_init()

    def ui_init(self):
        self.setWindowTitle('网速')
        self.resize(200,80)
        self.setWindowOpacity(0.9) # 设置窗口透明度
        self.setWindowFlag(Qt.FramelessWindowHint) # 隐藏边框
        self.setWindowFlag(Qt.WindowStaysOnTopHint) # 窗口始终显示在最前面
        self.upload_icon = QLabel()
        self.upload_icon.setPixmap(QPixmap(':res/upload.png'))
        self.upload_icon.setScaledContents(True)
        self.download_icon = QLabel()
        self.download_icon.setPixmap(QPixmap(':res/download.png'))
        self.download_icon.setScaledContents(True)
        self.upload_text = QLabel()
        self.upload_text.setText('upload: ')
        self.download_text = QLabel()
        self.download_text.setText('download: ')

        self.upload_lab = QLabel()
        self.download_lab = QLabel()

        self.g_layout = QGridLayout()
        self.g_layout.addWidget(self.upload_icon,0,0,1,1)
        self.g_layout.addWidget(self.download_icon,1,0,1,1)
        self.g_layout.addWidget(self.upload_text,0,1,1,1)
        self.g_layout.addWidget(self.download_text,1,1,1,1)
        self.g_layout.addWidget(self.upload_lab,0,2,1,4)
        self.g_layout.addWidget(self.download_lab,1,2,1,4)
        self.widget = QWidget()
        self.widget.setLayout(self.g_layout)
        self.setCentralWidget(self.widget)

    def thread_init(self):
        self.net_thread = NetThread()
        self.net_thread.net_signal.connect(self.net_slot)
        self.net_thread.start(1000)

    def variate_init(self):
        self.upload_content = ''
        self.download_content = ''

    def net_slot(self,upload_content,download_content):
        self.upload_lab.setText(upload_content)
        self.download_lab.setText(download_content)

    def mousePressEvent(self, event):
        '''
        重写按下事件
        '''
        self.start_x = event.x()
        self.start_y = event.y()

    def mouseMoveEvent(self, event):
        '''
        重写移动事件
        '''
        dis_x = event.x() - self.start_x
        dis_y = event.y() - self.start_y
        self.move(self.x()+dis_x, self.y()+dis_y)
  • mousePressEvent()

获取鼠标按下时的坐标位置(相对于窗口左上角)

  • mouseMoveEvent()

当鼠标处于按下状态并开始移动时,鼠标离窗口左上角的位置会不断更新并保存在event.x()和event.y()中。
我们将更新后的x和y值不断减去鼠标按下时的坐标位置,就可以知道鼠标移动的距离。最后再调用move方法将窗口当前坐标加上移动距离即可

网速线程

class NetThread(QThread):
    net_signal = pyqtSignal(str,str)
    def __init__(self):
        super(NetThread,self).__init__()

    def net_func(self):
        parameter = psutil.net_io_counters()
        recv1 = parameter[1] #接收数据
        send1 = parameter[0] #上传数据
        time.sleep(1)  # 每隔1s监听端口接收数据
        parameter = psutil.net_io_counters()
        recv2 = parameter[1]
        send2 = parameter[0]
        self.upload_content = '{:.1f} kb/s.'.format((send2 - send1) / 1024.0)
        self.download_content = '{:.1f} kb/s.'.format((recv2 - recv1) / 1024.0)

    def run(self):
        while(1):
            self.net_func()
            self.net_signal.emit(self.upload_content,self.download_content)
            time.sleep(1)

全部代码

import sys
import time
import psutil

from PyQt5.QtWidgets import QApplication, QHBoxLayout, QMainWindow, QWidget, QFrame, QLabel, QVBoxLayout, QGridLayout
from PyQt5.QtCore import Qt, pyqtSignal, QThread
from PyQt5.QtGui import QPixmap
import res

class NetWindows(QMainWindow):
    net_signal = pyqtSignal(str,str)
    def __init__(self):
        super(NetWindows,self).__init__()
        self.ui_init()
        self.thread_init()

    def ui_init(self):
        self.setWindowTitle('网速')
        self.resize(200,80)
        self.setWindowOpacity(0.9) # 设置窗口透明度
        self.setWindowFlag(Qt.FramelessWindowHint) # 隐藏边框
        self.setWindowFlag(Qt.WindowStaysOnTopHint) # 窗口始终显示在最前面
        self.upload_icon = QLabel()
        self.upload_icon.setPixmap(QPixmap(':res/upload.png'))
        self.upload_icon.setScaledContents(True)
        self.download_icon = QLabel()
        self.download_icon.setPixmap(QPixmap(':res/download.png'))
        self.download_icon.setScaledContents(True)
        self.upload_text = QLabel()
        self.upload_text.setText('upload: ')
        self.download_text = QLabel()
        self.download_text.setText('download: ')

        self.upload_lab = QLabel()
        self.download_lab = QLabel()

        self.g_layout = QGridLayout()
        self.g_layout.addWidget(self.upload_icon,0,0,1,1)
        self.g_layout.addWidget(self.download_icon,1,0,1,1)
        self.g_layout.addWidget(self.upload_text,0,1,1,1)
        self.g_layout.addWidget(self.download_text,1,1,1,1)
        self.g_layout.addWidget(self.upload_lab,0,2,1,4)
        self.g_layout.addWidget(self.download_lab,1,2,1,4)
        self.widget = QWidget()
        self.widget.setLayout(self.g_layout)
        self.setCentralWidget(self.widget)

    def thread_init(self):
        self.net_thread = NetThread()
        self.net_thread.net_signal.connect(self.net_slot)
        self.net_thread.start(1000)

    def variate_init(self):
        self.upload_content = ''
        self.download_content = ''

    def net_slot(self,upload_content,download_content):
        self.upload_lab.setText(upload_content)
        self.download_lab.setText(download_content)

    def mousePressEvent(self, event):
        '''
        重写按下事件
        '''
        self.start_x = event.x()
        self.start_y = event.y()

    def mouseMoveEvent(self, event):
        '''
        重写移动事件
        '''
        dis_x = event.x() - self.start_x
        dis_y = event.y() - self.start_y
        self.move(self.x()+dis_x, self.y()+dis_y)

class NetThread(QThread):
    net_signal = pyqtSignal(str,str)
    def __init__(self):
        super(NetThread,self).__init__()

    def net_func(self):
        parameter = psutil.net_io_counters()
        recv1 = parameter[1] #接收数据
        send1 = parameter[0] #上传数据
        time.sleep(1)  # 每隔1s监听端口接收数据
        parameter = psutil.net_io_counters()
        recv2 = parameter[1]
        send2 = parameter[0]
        self.upload_content = '{:.1f} kb/s.'.format((send2 - send1) / 1024.0)
        self.download_content = '{:.1f} kb/s.'.format((recv2 - recv1) / 1024.0)

    def run(self):
        while(1):
            self.net_func()
            self.net_signal.emit(self.upload_content,self.download_content)
            time.sleep(1)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    dispaly = NetWindows()
    dispaly.show()
    netwidows = NetWindows()
    sys.exit(app.exec_())

成果展示

到此这篇关于Python PyQt5实战项目之网速监控器的实现的文章就介绍到这了,更多相关Python PyQt5 网速监控器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python编程使用PyQt5库实现动态水波进度条示例

    目录 原理介绍 代码实操 最近做了一个小项目,里面有一个需求需要添加一个动态进度条,进度条的样式就类似于水波来回起伏的那种形状,下面就是最初的展示效果(有一点区别,这里我加了一个进度自动增加的功能): 下面先说一下这个效果的制作原理 原理介绍 在介绍动态效果之前需要先看一下静态的: 如果仔细观察的话,静态图效果的呈现在于先后的两个线条的绘制,产生水波的主要是由于两线条的左右的水平错位 以及 设置的透明度不同 所造成的: 想要形成最后的水波荡漾的视觉效果,只需要把数张线条连续走向的静态图拼接在一起

  • python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例

    本文在上文的基础上重新实现支持多线程的服务器. 以下为TCP客户端的程序代码: #!/usr/bin/env python3 import sys from PyQt5.QtCore import (QByteArray, QDataStream, QDate, QIODevice, QRegExp, Qt) from PyQt5.QtWidgets import (QApplication, QDateEdit, QFrame, QGridLayout, QHBoxLayout, QLabel

  • Python实战项目用PyQt5制作漫画脸GUI界面

    目录 最终效果 前言 1.PyQt5的安装. 1.PyQt5库的安装. 2.qt designer 布局的使用. 1:打开这个设计师 2:创建一个窗口 3:设计界面,用鼠标拖动左边的控件. 4:ui转化为py 5:在python上面运行转化后的py文件 6:运行py文件 3.百度智能云api的调用. 4.调控界面的控件. 5.最终成果 6.总结 最终效果 前言 这是最近在学qt这个东西,然后又学会了调用api,然后就想了用pyqt5做一个GUI界面,后期也可以打包分享给其他人使用,所以就最近就写

  • Python利用PyQt5制作一个获取网络实时NBA数据并播报的GUI程序

    制作NBA数据爬虫 捋顺思路 我们在这里选择的是百度体育带来的数据,我们在百度当中直接搜索NBA跳转到网页,我们可以看到,百度已经为我们提供了相关的数据 我们点击进去后,可以发现这是一个非常简洁的网址 我们看一下这个地址栏,发现毫无规律https://tiyu.baidu.com/live/detail/576O5Zu955S35a2Q6IGM5Lia56%2Bu55CD6IGU6LWbI2Jhc2tldGJhbGwjMjAyMS0wNi0xMyPniLXlo6t2c%2BWspritq%2Bi

  • python通过PyQt5实现登录界面的示例代码

    目录 1. pyQt5简单使用 安装 界面化操作 2.开始实现登录界面 今天为大家介绍一个利用开发登录界面模板,基于pyqt5库,pyqt5这也一个PythonGUI界面开发的库,非常强 本例,展示了通过登录界面打开主界面的实现方式. 在开始实现登录界面前,先给大家普及一下PyQt5的安装以及使用 1. pyQt5简单使用 安装 pip install PyQt5 pip3.5 install pyqt5-tools 界面化操作 1.在win+R中输入designer并敲回车,即可启动Desig

  • Python编程使用PyQt5制作动态钟表示例

    目录 前言 环境配置 实现思路 老式钟表制作 电子表制作 合并两表界面 核心代码 总结 前言 大家好,我是小张~ 记得小时候,家里只有一个钟表用来看时间(含有时针.分针.秒针的那种),挂在墙上哒哒哒响个不停,现在生活条件好了.基本人手一部手机,看时间也不再依靠表了,而今天的文章内容就是与这类钟表相关: 环境配置 程序中用到的Python包 PyQt5 math sys 实现思路 实现思路分为大致分为三个部分:老式钟表制作.电子表制作.两表合并为一个界面 老式钟表制作 整体来看老式钟表界面,有以下

  • Python利用PyQt5制作一个获取网络实时数据NBA数据播报GUI功能

    制作NBA数据爬虫 捋顺思路 我们在这里选择的是百度体育带来的数据,我们在百度当中直接搜索NBA跳转到网页,我们可以看到,百度已经为我们提供了相关的数据 我们点击进去后,可以发现这是一个非常简洁的网址 我们看一下这个地址栏,发现毫无规律https://tiyu.baidu.com/live/detail/576O5Zu955S35a2Q6IGM5Lia56%2Bu55CD6IGU6LWbI2Jhc2tldGJhbGwjMjAyMS0wNi0xMyPniLXlo6t2c%2BWspritq%2Bi

  • Python PyQt5实战项目之网速监控器的实现

    目录 简介 psutil模块使用 主界面 网速线程 全部代码 成果展示 简介 看到了一个能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息的模块–psutil模块.这次利用psutil.net_io_counters()这个方法. psutil模块使用 >>> psutil.net_io_counters() # 获取网络读写字节/包的个数 snetio(bytes_sent=16775953, bytes_recv=712657945, packets_s

  • Python PyQt5实战项目之文件拷贝器的具体实现详解

    目录 简介 UI设置 主要逻辑 信号与槽 成果展示 简介 写了一个简单的文件夹内容下所有文件复制到另一个文件夹内,主要逻辑代码是来自<2小时玩转python多线程编程>中的一个章节. UI设置 def ui_init(self): ''' 界面的函数 ''' self.setWindowTitle('拷贝器') self.resize(600,400) self.setMinimumSize(600,400) # 设置窗口的最小值 '''控件''' self.root_btn = QPushB

  • Python PyQt5实战项目之查询器的实现流程详解

    目录 简介 主界面 添加数据的界面 删除数据的界面 修改数据的界面 全部代码 展示 简介 这是一个操作数据库(sqlite3)的项目,用PyQt5进行界面封装. 此次项目最主要的是,主界面与子界面的交互,一个主界面与三个子界面交互 可以添加数据,修改数据,删除数据 主界面 class MainWidget(QMainWindow): def __init__(self): super(MainWidget,self).__init__() self.ui_init() self.connect_

  • python游戏实战项目之智能五子棋

    目录 导语 正文 总结 导语 ​ 今日游戏更新,大家好,我是木木子,每天都给大家更新最好玩的游戏!关注我,从此你再也不用去费力找游戏了! 最热门最好玩的Python游戏点击即玩! 今天推荐的游戏是五子棋小游戏--人机对战.联机对战皆可! 你是否还记得?中学时代和同桌下过的五子棋? ​ 这样下棋只怕是会被打!​!!!我怀疑他开挂了,并且找到了证据. ​ 正文 首先准备好需要的图片等素材部分如下: ​​​ 好了!直接上代码吧--设置游戏开始界面: class gameStartUI(QWidget)

  • python游戏实战项目之童年经典超级玛丽

    导语 "超级玛丽"--有多少人还记得这款经典游戏?那个戴帽子的大胡子穿着背带裤的马里奥! 带您重温经典的回忆,超级马里奥拯救不开心!炫酷来袭. 如果您的童年,也曾被魔性的 灯~灯灯~灯~灯灯~灯洗脑~那就来怀旧一番吧! 我是华丽的分割线------------------------------ 往期写过游戏实战已经积累到30几篇了哦~嘿嘿,推一波之前的,狗头保命.jpg. 欢迎大家来领免费的游戏,开玩啦~源码可以直接找我拿滴! 在座的各位大佬,你们都玩过这里面的几个游戏吖? ​ 往期

  • python游戏实战项目之俄罗斯方块的魅力

    目录 导语 正文 效果图: ​总结 导语 ​ 为什么有这么一个简单的游戏?这个游戏如此受欢迎? 仅仅是因为它在游戏行业异常匮乏的年代出现,从而成为了一代人的记忆吗?恐怕并不是. 玩过俄罗斯方块的人都明白,它给人的感觉就像是嗑瓜子一样,一旦开始就会像上瘾一样难以停下来,绞尽脑汁只想填满空缺的地方. ​ 哈哈哈!小编每周的话基本上都会整理一些游戏代码的哈! 这一期文章就带大家来开发一款俄罗斯方块小游戏! 正文 游戏规则:由小方块组成的不同形状的板块陆续从屏幕上方落下来,玩家通过调整板块的位置和方向,

  • python游戏实战项目之智能五子棋简易版

    目录 导语 正文 总结 导语 前段时间不是制作了一款升级版本五子棋的嘛! 但是居然有粉丝私信我说: "准备拿到代码玩一下ok过去了!太难了准备放收藏夹落灰q@q~" 所噶,今天先放一个简易版本的五子棋给大家看看!学习嘛~从简单到难 还是慢慢来撒~ 学玩这篇可以学下一篇难一点的撒: Pygame实战:下五子棋吗?信不信我让你几步你也赢不了?​​​​​​​ 正文 嘿嘿!这五子棋只有人机对战了哈!不要看人机对战感觉很简单,其实代码量也超多滴. 主要代码:都有注释的撒!就不一步一步介绍了. i

  • Python爬虫实战项目掌握酷狗音乐的加密过程

    1.前言 小编在这里讲一下,下面的内容仅供学习参考,切莫用于商业活动,一经被相关人员发现,本小编概不负责!读者切记切记. 2.获取音乐播放列表 其实,这就是小编要讲的重点,因为就是这部分用到了加密. 我们在搜索栏上输入我们想听的音乐,小编输入:刺客 是不是看到了一系列音乐,怎样得到这些音乐的一些信息呢?(这里指的音乐信息是指音乐的hash值和音乐的album_id值[这两个参数在获取音乐的下载链接那里会用到],当然还包括音乐的名称[不然怎么区别呢?]). 由于这一系列音乐是动态加载出来的,也就是

  • python爬虫实战项目之爬取pixiv图片

    自从接触python以后就想着爬pixiv,之前因为梯子有点问题就一直搁置,最近换了个梯子就迫不及待试了下. 爬虫无非request获取html页面然后用正则表达式或者beautifulsoup之类现成工具截取我们想要的页面,pixiv也不例外. 首先我们来实现模拟登陆,虽然大多数情况不需要我们实现模拟登录,但如果你是会员之类的,登录和不登录网页就有区别.思路是登录时抓包抓到post请求,看pixiv构建的post的数据表格是什么格式,我们根据这个格式构建form,然后调用post方法去请求,再

随机推荐