python 实现 macOS状态栏 网速实时显示

本文介绍了一个使用Python库Pillow、psutil和rumps构建的NetSpeedApp,实现实时监控网络下载和上传速度,并自动生成带有速度信息的图标。
摘要由CSDN通过智能技术生成

安装依赖包:

pip install pillow psutil rumps

netSpeedApp.py

from PIL import Image, ImageDraw, ImageFont
import psutil
import rumps


class NetSpeedApp(rumps.App):
    def __init__(self):
        super(NetSpeedApp, self).__init__("NetSpeed")
        self.title=''
        self.last_download = psutil.net_io_counters().bytes_recv
        self.last_upload = psutil.net_io_counters().bytes_sent
        self.icon = self.generate_icon()  # 设置图标
        self.template = True  # 为True时系统自动生成黑色图标 重点!!!
        rumps.Timer(self.update_speed, 1).start()  # 启动定时器,每秒更新一次

    def update_speed(self, sender):
        # 计算下载和上传速度
        download_speed = psutil.net_io_counters().bytes_recv - self.last_download
        upload_speed = psutil.net_io_counters().bytes_sent - self.last_upload

        # 更新上一次的下载和上传值
        self.last_download = psutil.net_io_counters().bytes_recv
        self.last_upload = psutil.net_io_counters().bytes_sent

        # 生成包含两行文本信息的图片
        self.generate_icon(download_speed, upload_speed)

        # 更新图标
        self.icon = self.icon


    def generate_icon(self, download_speed=0, upload_speed=0):
        filename = 'img.png'
        # 创建一个空白图像
        image = Image.new("RGBA", (120, 40), (0, 0, 0, 0))

        # 获取字体 size 20
        font = ImageFont.load_default(20)

        # 获取绘图上下文
        draw = ImageDraw.Draw(image)

        # 绘制下载和上传速度文本
        draw.text((0, 0), "U: {}".format(self.format_speed(upload_speed)), font=font, fill="white")
        draw.text((0, 20), "D: {}".format(self.format_speed(download_speed)), font=font, fill="white")
        image.save(filename, format="PNG")
        return filename

    def format_speed(self, speed):
        # 格式化速度,以 B、KB 或 MB 为单位
        if speed < 1024:
            return "{} B/s".format(speed)
        elif 1024 <= speed < 1048576:
            return "{:.1f} KB/s".format(speed / 1024)
        else:
            return "{:.1f} MB/s".format(speed / 1048576)

if __name__ == "__main__":
    NetSpeedApp().run()


# 修改源码 file:rumps.py > func:_nsimage_from_file > line:128:image.setSize_((60, 20) if dimensions is None else dimensions)  # (20, 20)=>(60, 20)

效果预览:
黑色背景
白色背景

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CtrlCV工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值