python百行代碼自制電腦端網(wǎng)速懸浮窗的實(shí)現(xiàn)
前言
看到某60的網(wǎng)速懸浮球有點(diǎn)心動(dòng),但是又不想裝這個(gè)流氓軟件,就自己用python加PyQt5自制了一個(gè),實(shí)測(cè)還行,關(guān)鍵不占用電腦一點(diǎn)資源,已將軟件打包,可自行下載使用。
預(yù)覽
觀看直播時(shí)實(shí)時(shí)網(wǎng)速。

文件結(jié)構(gòu)

運(yùn)行管理
開始運(yùn)行時(shí)內(nèi)存消耗18.3m,cpu,磁盤,網(wǎng)絡(luò)不占用。

運(yùn)行一天后內(nèi)存穩(wěn)定于6.4m,cpu,磁盤,網(wǎng)絡(luò)不占用。

整體思路
- 使用psuti.net_io_counters 監(jiān)控電腦網(wǎng)卡IO
- 將流量數(shù)據(jù)格式化,統(tǒng)計(jì)每次數(shù)據(jù)總和保存在本地《流量使用情況.txt》(這個(gè)是個(gè)缺陷,我只用txt保存,用戶可以隨意更改,后期完善一下加密保存,隱藏文件信息。)
- PyQt窗口制作,兩個(gè)label,一個(gè)網(wǎng)速信息,一個(gè)動(dòng)態(tài)圖展示,隱藏窗口標(biāo)題欄,任務(wù)欄,窗口全屏幕隨意移動(dòng),鼠標(biāo)放到窗口樣式變?yōu)樽ナ郑髽?biāo)右鍵菜單欄,退出程序,軟件關(guān)于。
- 退出程序時(shí)保存流量總和信息到文件,下次啟動(dòng)先讀取流量總和數(shù)據(jù)。
代碼清單
網(wǎng)速獲取&&格式化
def gsh(count):
if count < 1024:
return "%.2f B/s" % count
if count < 1048576:
return "%.2f KB/s" % (count / 1024)
count >>= 10
if count < 1048576:
return "%.2f MB/s" % (count / 1024)
count >>= 10
return "%.2f GB/s" % (count / 1024)
def get_data():
old = [0, 0]
new = [0, 0]
net_info = net_io_counters() # 獲取流量統(tǒng)計(jì)信息
recv_bytes = net_info.bytes_recv
sent_bytes = net_info.bytes_sent
old[0] += recv_bytes
old[1] += sent_bytes
time.sleep(1)
# 當(dāng)前所收集的數(shù)據(jù)
net_info = net_io_counters() # 獲取流量統(tǒng)計(jì)信息
recv_bytes = net_info.bytes_recv
sent_bytes = net_info.bytes_sent
new[0] += recv_bytes
new[1] += sent_bytes
info = []
for i in range(2):
info.append(new[i] - old[i])
return info
窗口界面
class Main(QWidget):
_startPos = None
_endPos = None
_isTracking = False
all_bytes=0
about = "監(jiān)控電腦網(wǎng)絡(luò)的上傳跟下載網(wǎng)速。\n統(tǒng)計(jì)網(wǎng)絡(luò)使用總流量!\n作者:旋凱凱旋"
def __init__(self):
super().__init__()
self._initUI()
with open('流量使用情況.txt', 'r') as f:
self.all_bytes = int(f.read())
def _initUI(self):
self.setFixedSize(QSize(259, 270))
self.setWindowFlags(Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint | Qt.Tool)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground) # 設(shè)置窗口背景透明
self.label = QtWidgets.QLabel(self)
self.label.setGeometry(QtCore.QRect(0, 0, 259, 111))
self.label.setMinimumSize(QtCore.QSize(259, 111))
self.label.setBaseSize(QtCore.QSize(259, 111))
self.label.setStyleSheet("font: 75 20pt \"Adobe Arabic\";color:rgb(255,0,0)")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.label2 = QtWidgets.QLabel(self)
self.label2.setGeometry(QtCore.QRect(10, 110, 259, 161))
self.label2.setMinimumSize(QtCore.QSize(259, 161))
self.label2.setBaseSize(QtCore.QSize(259, 161))
self.label2.setAlignment(QtCore.Qt.AlignCenter)
self.gif = QMovie('1271.gif')
self.label2.setMovie(self.gif)
self.label2.setObjectName("label2")
self.gif.start()
self.timer = QtCore.QTimer(self)
self.timer.start(1000)
self.timer.timeout.connect(self.start)
self.setCursor(QCursor(Qt.PointingHandCursor))
self.show()
邏輯函數(shù)
def start(self):
Thread(target=self.setSpeed, daemon=True).start()
def setSpeed(self):
info = get_data()
recv_bytes = gsh(info[0]) # 每秒接收的字節(jié)
sent_bytes = gsh(info[1]) # 每秒發(fā)送的字節(jié)
self.all_bytes += sum(info)
if self.all_bytes<1073741824:
all_bytes = self.all_bytes / 1048576
strs="已使用:%.2f Mb"%all_bytes
else:
all_bytes = self.all_bytes / 1073741824
strs = "已使用:%.2f Gb" % all_bytes
self.label.setText("上傳:%s\n下載:%s\n%s"%(sent_bytes,recv_bytes,strs)
鼠標(biāo)事件
def mouseMoveEvent(self, e: QMouseEvent): # 重寫移動(dòng)事件
self._endPos = e.pos() - self._startPos
self.move(self.pos() + self._endPos)
def mousePressEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = True
self._startPos = QPoint(e.x(), e.y())
if e.button() == Qt.RightButton:
menu = QMenu(self)
quitAction = menu.addAction("退出程序")
aboutAction=menu.addAction("關(guān)于程序")
action = menu.exec_(self.mapToGlobal(e.pos()))
if action == quitAction:
with open('流量使用情況.txt', 'w') as f:
f.write(str(self.all_bytes))
qApp.quit()
if action == aboutAction:
msg_box = QtWidgets.QMessageBox
msg_box.question(self, "關(guān)于", self.about,msg_box.Yes | msg_box.Cancel)
if QMessageBox.Yes:
webbrowser.open('https://me.csdn.net/Cxk___', new=0, autoraise=True)
def mouseReleaseEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = False
self._startPos = None
self._endPos = None
if e.button() == Qt.RightButton:
self._isTracking = False
self._startPos = None
self._endPos = None
庫(kù)
# -*- coding: utf-8 -*- import time import webbrowser from PyQt5.QtCore import QSize, QPoint, Qt from PyQt5.QtGui import QMouseEvent, QMovie, QCursor from PyQt5.QtWidgets import QWidget, QMessageBox, QApplication, QMenu, qApp from psutil import net_io_counters #net_io_counters 網(wǎng)絡(luò)輸入與輸出 如果需要獲取單個(gè)網(wǎng)卡的io信息,加上pernic=True參數(shù)。 from threading import Thread import sys from qtpy import QtWidgets, QtCore
運(yùn)行
if __name__ == '__main__': app = QApplication(sys.argv) ex = Main() sys.exit(app.exec_()
到此這篇關(guān)于python百行代碼自制電腦端網(wǎng)速懸浮窗的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python 電腦端網(wǎng)速懸浮窗內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫代碼實(shí)例
這篇文章主要介紹了基于python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
python+selenium實(shí)現(xiàn)163郵箱自動(dòng)登陸的方法
本篇文章主要介紹了python+selenium實(shí)現(xiàn)163郵箱自動(dòng)登陸的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12
Python中文分詞實(shí)現(xiàn)方法(安裝pymmseg)
這篇文章主要介紹了Python中文分詞實(shí)現(xiàn)方法,通過安裝pymmseg來實(shí)現(xiàn)分詞功能,涉及pymmseg的下載、解壓、安裝及使用技巧,需要的朋友可以參考下2016-06-06
python多種數(shù)據(jù)類型輸出為Excel文件
本文主要介紹了將Python中的列表、元組、字典和集合等數(shù)據(jù)類型輸出到Excel文件中,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03
Python對(duì)中國(guó)500強(qiáng)排行榜數(shù)據(jù)進(jìn)行可視化分析實(shí)戰(zhàn)
這篇文章主要介紹了Python對(duì)中國(guó)500強(qiáng)排行榜數(shù)據(jù)進(jìn)行可視化分析實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
基于Python 中函數(shù)的 收集參數(shù) 機(jī)制
今天小編就為大家分享一篇基于Python 中函數(shù)的 收集參數(shù) 機(jī)制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12
python matplotlib餅狀圖參數(shù)及用法解析
這篇文章主要介紹了python matplotlib餅狀圖參數(shù)及用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Python?Asyncio庫(kù)之a(chǎn)syncio.task常用函數(shù)詳解
Asyncio在經(jīng)過一段時(shí)間的發(fā)展以及獲取Curio等第三方庫(kù)的經(jīng)驗(yàn)來提供更多的功能,目前高級(jí)功能也基本完善。本文主要介紹了Asyncio庫(kù)中asyncio.task常用函數(shù)的使用,需要的可以參考一下2023-03-03
python結(jié)合opencv實(shí)現(xiàn)人臉檢測(cè)與跟蹤
在Python下用起來OpenCV很爽,代碼很簡(jiǎn)潔,很清晰易懂。使用的是Haar特征的分類器,訓(xùn)練之后得到的數(shù)據(jù)存在一個(gè)xml中。下面我們就來詳細(xì)談?wù)劇?/div> 2015-06-06
Python 繪制北上廣深的地鐵路線動(dòng)態(tài)圖
這篇文章主要介紹了用python制作北上廣深——地鐵線路動(dòng)態(tài)圖,文中的示例代碼講解詳細(xì),對(duì)我們的工作或?qū)W習(xí)都有一定的價(jià)值,感興趣的同學(xué)可以學(xué)習(xí)一下2021-12-12最新評(píng)論

