如何用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()
三、关键细节说明
为什么不能用while循环?
Tkinter的mainloop()是单线程的,主线程一旦被while循环占用,就无法处理窗口拖动、按钮点击等UI事件,直接导致界面卡死。而after()是告诉Tkinter:“过1秒帮我调用这个函数”,不会阻塞主循环,UI能全程保持响应。树莓派温度读取逻辑
树莓派的CPU温度传感器会实时把数据写入/sys/class/thermal/thermal_zone0/temp,里面的数值是千分之一摄氏度,所以必须除以1000才能得到我们熟悉的°C单位。跨平台适配
用platform.system()判断当前系统,非Linux环境下会在控制台给出提示,UI也会显示友好的提示文本,不会让程序直接崩溃,完美适配你在Mac和树莓派间切换开发的场景。
四、使用方式
- 在树莓派上直接运行代码,就能看到每秒刷新的CPU温度
- 在Mac上运行时,控制台会弹出提示,UI显示温度读取限制,不影响程序正常运行
内容的提问来源于stack exchange,提问作者Vedatman Basu
相关产品推荐
相关产品推荐

