最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python開發(fā)網(wǎng)絡(luò)速度監(jiān)控工具

 更新時(shí)間:2025年01月19日 13:36:18   作者:黑客白澤  
這篇文章主要為大家詳細(xì)介紹了如何基于 PyQt5 框架開發(fā)一個(gè)實(shí)時(shí)網(wǎng)絡(luò)速度監(jiān)控工具,能夠顯示當(dāng)前設(shè)備的上傳和下載速度,感興趣的小伙伴可以了解下

1. 簡(jiǎn)介

這個(gè)程序是一個(gè)基于 PyQt5 框架開發(fā)的實(shí)時(shí)網(wǎng)絡(luò)速度監(jiān)控工具,能夠顯示當(dāng)前設(shè)備的上傳和下載速度。它以一個(gè)小巧的窗口形式展示,默認(rèn)位置為屏幕的右下角,且窗口始終置頂。程序的顯示內(nèi)容包括上傳和下載的網(wǎng)絡(luò)速度,并支持通過鼠標(biāo)拖動(dòng)移動(dòng)窗口。

功能介紹

實(shí)時(shí)網(wǎng)絡(luò)速度監(jiān)控:

  • 通過 psutil 庫獲取當(dāng)前設(shè)備的網(wǎng)絡(luò)流量數(shù)據(jù),包括上傳和下載的字節(jié)數(shù)。
  • 每秒刷新一次上傳和下載速度,單位為 Kb/s 或 Mb/s(當(dāng)速度超過 1MB/s時(shí)自動(dòng)轉(zhuǎn)換為 Mb/s)。

無邊框透明窗口:

  • 使用 PyQt5 提供的 QWidget,設(shè)置為透明背景和無邊框窗口,方便嵌入桌面環(huán)境且不干擾其他應(yīng)用程序顯示。 始終置頂顯示:
  • 窗口設(shè)置為始終置頂,即使用戶在其他應(yīng)用程序之間切換,速度監(jiān)控窗口也會(huì)保持在前面顯示。 自定義字體與樣式:
  • 字體采用系統(tǒng)默認(rèn)的 “Segoe UI” 字體,并且設(shè)置為加粗樣式,確保文字清晰易讀。
  • 上傳和下載速度分別使用不同的顏色,增強(qiáng)視覺區(qū)分度。

可拖動(dòng)窗口:

  • 支持通過鼠標(biāo)拖動(dòng)窗口,用戶可以長(zhǎng)按窗口頂部部分來自由移動(dòng)窗口位置。
  • 拖動(dòng)靈敏度可調(diào),用戶可根據(jù)需求增加拖動(dòng)區(qū)域的高度以便更容易拖動(dòng)窗口。

屏幕右下角默認(rèn)位置:

程序啟動(dòng)后,窗口會(huì)自動(dòng)定位到屏幕的右下角,并且不會(huì)被其他窗口遮擋。

后臺(tái)線程處理數(shù)據(jù)獲?。?/p>

使用 QThread 來處理網(wǎng)絡(luò)流量數(shù)據(jù)的獲取,避免阻塞主線程,從而保持用戶界面的響應(yīng)性。

技術(shù)棧

PyQt5:用于創(chuàng)建圖形界面和處理用戶交互。

psutil:用于獲取網(wǎng)絡(luò)流量統(tǒng)計(jì)數(shù)據(jù)(如上傳和下載字節(jié)數(shù))。

QThread:用于異步獲取網(wǎng)絡(luò)數(shù)據(jù),以確保UI的流暢更新。

該程序的設(shè)計(jì)旨在為用戶提供一個(gè)簡(jiǎn)單、直觀的實(shí)時(shí)網(wǎng)絡(luò)流量監(jiān)控工具,同時(shí)保持界面的干凈、透明和可定制性,滿足日常監(jiān)控需求。

2. 運(yùn)行效果

3. 相關(guān)源碼

#!/usr/bin/python
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QDesktopWidget
from PyQt5.QtGui import QCursor, QFont
from PyQt5.QtCore import Qt, QThread, pyqtSignal, QTimer
import psutil
import sys

class Speed(QWidget):
    def __init__(self):
        super(Speed, self).__init__()
        self.initUI()
        self.worker = MyWorker()
        self.worker.timeout.connect(self.update_speed)
        self.worker.start()

    def initUI(self):
        """初始化UI"""
        self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.resize(160, 70)

        # 上傳和下載標(biāo)簽
        self.up = QLabel(self)
        self.down = QLabel(self)
        
        self.up.setGeometry(5, 5, 160, 20)
        self.down.setGeometry(5, 28, 160, 20)

        # 設(shè)置字體(使用 Segoe UI 系統(tǒng)字體)
        font = QFont("Segoe UI", 15, QFont.Bold)
        self.up.setFont(font)
        self.down.setFont(font)

        # 設(shè)置文字顏色和樣式
        self.up.setStyleSheet("color:#e1b16a")
        self.down.setStyleSheet("color:#ce4a57")
        self.setStyleSheet("QLabel{font-size:15px;font-weight:bold}")
        
        # 設(shè)置窗口默認(rèn)位置在屏幕右下角
        self.set_window_position()

        # 顯示窗口
        self.show()

        # 拖動(dòng)靈敏度設(shè)置:增加拖動(dòng)區(qū)域的高度,使其更大
        self.drag_sensitivity = 35  # 擴(kuò)大拖動(dòng)區(qū)域,默認(rèn)為35

    def set_window_position(self):
        """將窗口設(shè)置到屏幕右下角"""
        screen_geometry = QDesktopWidget().availableGeometry()
        screen_width = screen_geometry.width()
        screen_height = screen_geometry.height()

        window_width = self.width()
        window_height = self.height()
        x_position = screen_width - window_width - 10  # 右邊距 10
        y_position = screen_height - window_height - 10  # 下邊距 10

        self.move(x_position, y_position)

    def update_speed(self, speed_data):
        """更新上傳和下載速度顯示"""
        upload_speed, download_speed = speed_data

        # 上傳速度顯示
        upload_text = f"上傳 {upload_speed:.2f} {'Kb/s' if upload_speed < 1024 else 'Mb/s'}"
        self.up.setText(upload_text)

        # 下載速度顯示
        download_text = f"下載 {download_speed:.2f} {'Kb/s' if download_speed < 1024 else 'Mb/s'}"
        self.down.setText(download_text)

    def mousePressEvent(self, event):
        """鼠標(biāo)按下事件,開始拖動(dòng)窗口"""
        if event.button() == Qt.LeftButton and event.pos().y() < self.drag_sensitivity:
            self.m_flag = True
            self.m_Position = event.globalPos() - self.pos()
            event.accept()
            self.setCursor(QCursor(Qt.OpenHandCursor))

    def mouseMoveEvent(self, event):
        """鼠標(biāo)移動(dòng)事件,拖動(dòng)窗口"""
        if Qt.LeftButton and self.m_flag:
            self.move(event.globalPos() - self.m_Position)
            event.accept()

    def mouseReleaseEvent(self, event):
        """鼠標(biāo)釋放事件,停止拖動(dòng)窗口"""
        self.m_flag = False
        self.setCursor(QCursor(Qt.ArrowCursor))


class MyWorker(QThread):
    timeout = pyqtSignal(list)

    def __init__(self):
        super(MyWorker, self).__init__()
        self.previous_upload = 0
        self.previous_download = 0

    def run(self):
        """周期性獲取網(wǎng)絡(luò)流量數(shù)據(jù)并發(fā)射信號(hào)"""
        while True:
            try:
                net_io = psutil.net_io_counters()
                upload_speed = (net_io.bytes_sent - self.previous_upload) / 1024.0  # Kb/s
                download_speed = (net_io.bytes_recv - self.previous_download) / 1024.0  # Kb/s

                # 更新上次的發(fā)送和接收字節(jié)數(shù)
                self.previous_upload = net_io.bytes_sent
                self.previous_download = net_io.bytes_recv

                # 發(fā)射信號(hào)更新UI
                self.timeout.emit([upload_speed, download_speed])
            except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess) as e:
                print(f"Error: {e}")
            self.sleep(1)  # 每秒更新一次


if __name__ == '__main__':
    app = QApplication(sys.argv)
    speed_monitor = Speed()
    sys.exit(app.exec_())

到此這篇關(guān)于基于Python開發(fā)網(wǎng)絡(luò)速度監(jiān)控工具的文章就介紹到這了,更多相關(guān)Python網(wǎng)絡(luò)速度監(jiān)控內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(一)

    python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(一)

    這篇文章主要介紹了python網(wǎng)絡(luò)編程基礎(chǔ)知識(shí),需要的朋友可以參考下
    2014-06-06
  • Python使用Pandas對(duì)csv文件進(jìn)行數(shù)據(jù)處理的方法

    Python使用Pandas對(duì)csv文件進(jìn)行數(shù)據(jù)處理的方法

    這篇文章主要介紹了Python使用Pandas對(duì)csv文件進(jìn)行數(shù)據(jù)處理的方法,本文通過實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python Dask庫處理大規(guī)模數(shù)據(jù)集的強(qiáng)大功能實(shí)戰(zhàn)

    Python Dask庫處理大規(guī)模數(shù)據(jù)集的強(qiáng)大功能實(shí)戰(zhàn)

    Dask是一個(gè)靈活、開源的Python庫,專為處理大規(guī)模數(shù)據(jù)集而設(shè)計(jì),與傳統(tǒng)的單機(jī)計(jì)算相比,Dask能夠在分布式系統(tǒng)上運(yùn)行,有效利用集群的計(jì)算資源,本文將深入介紹Dask的核心概念、功能和實(shí)際應(yīng)用,通過豐富的示例代碼展示其在大數(shù)據(jù)處理領(lǐng)域的強(qiáng)大能力
    2023-12-12
  • 基于python求兩個(gè)列表的并集.交集.差集

    基于python求兩個(gè)列表的并集.交集.差集

    這篇文章主要介紹了基于python求兩個(gè)列表的并集.交集.差集,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • python實(shí)現(xiàn)區(qū)間合并的方法

    python實(shí)現(xiàn)區(qū)間合并的方法

    區(qū)間合并是指將重疊的區(qū)間合并為一個(gè)或多個(gè)不重疊的區(qū)間,本文主要介紹了python實(shí)現(xiàn)區(qū)間合并的方法,文中通過代碼介紹的很詳細(xì),感興趣的可以了解一下
    2024-02-02
  • Python實(shí)現(xiàn)生成bmp圖像的方法

    Python實(shí)現(xiàn)生成bmp圖像的方法

    本文主要介紹了Python實(shí)現(xiàn)生成bmp圖像的方法,對(duì)大家的學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • 使用Python處理CSV文件的全面指南

    使用Python處理CSV文件的全面指南

    在數(shù)據(jù)驅(qū)動(dòng)開發(fā)中,?結(jié)構(gòu)化存儲(chǔ)?是數(shù)據(jù)處理流程的關(guān)鍵環(huán)節(jié),CSV作為一種輕量級(jí)、跨平臺(tái)的文件格式,廣泛用于數(shù)據(jù)交換、日志記錄及中小規(guī)模數(shù)據(jù)存儲(chǔ),本文將介紹如何使用 Python 處理 CSV 文件,需要的朋友可以參考下
    2025-07-07
  • 修改 CentOS 6.x 上默認(rèn)Python的方法

    修改 CentOS 6.x 上默認(rèn)Python的方法

    這篇文章主要介紹了修改 CentOS 6.x 上默認(rèn)Python的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python中獲取網(wǎng)頁狀態(tài)碼的兩個(gè)方法

    Python中獲取網(wǎng)頁狀態(tài)碼的兩個(gè)方法

    這篇文章主要介紹了Python中獲取網(wǎng)頁狀態(tài)碼的兩個(gè)方法,分別使用urllib模塊和requests模塊實(shí)現(xiàn),需要的朋友可以參考下
    2014-11-11
  • python使用生成器實(shí)現(xiàn)可迭代對(duì)象

    python使用生成器實(shí)現(xiàn)可迭代對(duì)象

    這篇文章主要為大家詳細(xì)介紹了python如何使用生成器實(shí)現(xiàn)可迭代對(duì)象,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評(píng)論

云梦县| 宁陵县| 邵东县| 睢宁县| 恩平市| 新龙县| 永兴县| 马关县| 黔西县| 桦川县| 康平县| 洞头县| 杭锦旗| 鄱阳县| 双鸭山市| 陆丰市| 惠安县| 赤壁市| 大冶市| 鄂温| 泸州市| 依兰县| 岗巴县| 乐安县| 乌鲁木齐市| 许昌县| 汤阴县| 石狮市| 荔浦县| 大余县| 辽阳市| 石渠县| 米脂县| 阿克苏市| 陇川县| 正镶白旗| 平南县| 平安县| 新田县| 蕲春县| 澄江县|