国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python百行代碼自制電腦端網(wǎng)速懸浮窗的實(shí)現(xiàn)

瀏覽:78日期:2022-07-25 17:45:41

前言

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

預(yù)覽

觀看直播時(shí)實(shí)時(shí)網(wǎng)速。

python百行代碼自制電腦端網(wǎng)速懸浮窗的實(shí)現(xiàn)

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

python百行代碼自制電腦端網(wǎng)速懸浮窗的實(shí)現(xiàn)

運(yùn)行管理

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

python百行代碼自制電腦端網(wǎng)速懸浮窗的實(shí)現(xiàn)

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

python百行代碼自制電腦端網(wǎng)速懸浮窗的實(shí)現(xiàn)

整體思路

使用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('上傳:%sn下載:%sn%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.QMessageBoxmsg_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 = Falseself._startPos = Noneself._endPos = None if e.button() == Qt.RightButton:self._isTracking = Falseself._startPos = Noneself._endPos = None

庫(kù)

# -*- coding: utf-8 -*-import timeimport webbrowserfrom PyQt5.QtCore import QSize, QPoint, Qtfrom PyQt5.QtGui import QMouseEvent, QMovie, QCursorfrom PyQt5.QtWidgets import QWidget, QMessageBox, QApplication, QMenu, qAppfrom psutil import net_io_counters #net_io_counters 網(wǎng)絡(luò)輸入與輸出 如果需要獲取單個(gè)網(wǎng)卡的io信息,加上pernic=True參數(shù)。from threading import Threadimport sysfrom 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)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 成人网18免费软件大全 | 岛国在线永久免费视频 | 午夜视频网站 | 在线视频 自拍 | 玖玖色视频| 国产精品国产国产aⅴ | 国产精品日韩一区二区三区 | 欧美一区二区在线视频 | 日本三级香港三级三级人 | 成人性欧美丨区二区三区 | 亚洲欧美国产精品久久久 | 免费人成在观看 | 欧美综合自拍亚洲综合 | 在线亚洲黄色 | 国产dvd毛片在线视频 | 中文字幕99在线精品视频免费看 | 国产成人一区在线播放 | 亚洲国产高清视频在线观看 | 精品少妇一区二区三区视频 | 国产一区二区在线观看免费 | 国产成人18黄网站免费网站 | 72种姿势欧美久久久久大黄蕉 | 国产原创在线视频 | 亚洲国产日韩女人aaaaaa毛片在线 | 久草在线中文最新视频 | 国产亚洲精品久久 | 欧美日韩高清在线观看一区二区 | 欧美视频一区在线观看 | 手机在线黄色 | 国产做爰一区二区 | 国产免费福利体检区久久 | 国产一区二区久久 | 久久精品国产99精品最新 | 91看片淫黄大片欧美看国产片 | 欧美久久一区二区 | 欧美精品久久一区二区三区 | 久久99精品久久久久久三级 | 日韩国产欧美成人一区二区影院 | 男人的天堂久久 | 日本精品1在线区 | 国产成人精品一区二三区 |