You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python在Linux系统(树莓派/Mac)实现CPU温度持续读取并适配Tkinter

解决方案:在Tkinter中实时显示Linux CPU温度(适配树莓派)

我刚好做过类似的跨设备开发需求,这就给你一个完整的实现方案,既能在树莓派上精准获取CPU温度,又能完美适配Tkinter的无阻塞UI刷新逻辑~

一、核心思路拆解

  • 读取Linux系统专属的CPU温度文件(树莓派路径固定为/sys/class/thermal/thermal_zone0/temp)
  • 用Tkinter的after()方法替代while循环,实现每秒一次的温度刷新,完全不会阻塞UI
  • 加入跨平台判断,避免在Mac上运行时直接报错,方便你在两台设备间无缝切换开发

二、完整代码实现

import tkinter as tk
import platform

class CpuTempMonitor:
    def __init__(self, root):
        self.root = root
        self.root.title("树莓派CPU温度监控")
        
        # 创建大字体的温度显示标签
        self.temp_label = tk.Label(root, text="正在获取温度...", font=("Arial", 24))
        self.temp_label.pack(pady=30)
        
        # 启动第一次温度更新
        self.refresh_temp()
    
    def get_linux_cpu_temp(self):
        """获取Linux(树莓派)系统下的CPU温度"""
        try:
            # 树莓派的CPU温度会实时写入这个文件
            with open("/sys/class/thermal/thermal_zone0/temp", "r") as temp_file:
                raw_temp = temp_file.read().strip()
                # 原始值是千分之一摄氏度,转换为常规单位
                celsius_temp = float(raw_temp) / 1000
                return f"当前CPU温度: {celsius_temp:.1f}°C"
        except FileNotFoundError:
            return "仅支持Linux系统读取温度"
    
    def refresh_temp(self):
        """更新温度显示,并调度下一次刷新"""
        # 获取最新温度文本
        current_temp = self.get_linux_cpu_temp()
        # 更新UI标签内容
        self.temp_label.config(text=current_temp)
        
        # 1000毫秒(1秒)后再次调用自身,实现循环刷新
        self.root.after(1000, self.refresh_temp)

if __name__ == "__main__":
    # 跨平台提示,方便Mac开发时知晓限制
    if platform.system() != "Linux":
        print("提示:此工具仅在Linux系统(如树莓派)可读取CPU温度,Mac下将显示提示信息")
    
    root = tk.Tk()
    app = CpuTempMonitor(root)
    root.mainloop()

三、关键细节说明

  1. 为什么不能用while循环?
    Tkinter的mainloop()是单线程的,主线程一旦被while循环占用,就无法处理窗口拖动、按钮点击等UI事件,直接导致界面卡死。而after()是告诉Tkinter:“过1秒帮我调用这个函数”,不会阻塞主循环,UI能全程保持响应。

  2. 树莓派温度读取逻辑
    树莓派的CPU温度传感器会实时把数据写入/sys/class/thermal/thermal_zone0/temp,里面的数值是千分之一摄氏度,所以必须除以1000才能得到我们熟悉的°C单位。

  3. 跨平台适配
    用platform.system()判断当前系统,非Linux环境下会在控制台给出提示,UI也会显示友好的提示文本,不会让程序直接崩溃,完美适配你在Mac和树莓派间切换开发的场景。

四、使用方式

  • 在树莓派上直接运行代码,就能看到每秒刷新的CPU温度
  • 在Mac上运行时,控制台会弹出提示,UI显示温度读取限制,不影响程序正常运行

内容的提问来源于stack exchange,提问作者Vedatman Basu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:24:16