1、安装依赖

 https://github.com/kujirahand/tkeasygui-python 

pip install TkEasyGUI


2、编写个界面

import TkEasyGUI as eg


# MQTT 相关设置
broker = "192.168.50.232"
port = 1883
topic = "lemon_switch"
temperature_topic = "lemon_gpu_temp"



# define layout
layout = [[eg.Text("服务器地址:")], [eg.Input(key="boroker_server_address",text=broker)],
          [eg.Text("服务器端口号:")], [eg.Input(key="boroker_port",text=port)],
          [eg.Text("控制主题:")], [eg.Input(key="controller_topic",text=topic)],
          [eg.Text("温度报送主题:")], [eg.Input(key="tem_topic",text=temperature_topic)],
          [eg.Button(button_text="OK",size=[19,1])]
          ]
# create a window
window = eg.Window("Hello App", layout)
# event loop
while True:
    event, values = window.read()
    if event in ["OK", eg.WINDOW_CLOSED]:
        eg.popup("开始执行")
        broker = window["boroker_server_address"].get()
        port = int(window["boroker_port"].get())
        topic = window["controller_topic"].get()
        temperature_topic = window["tem_topic"].get()
        print(broker)
        break
# close window
window.close()

client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)

def get_nvidia_temperature():
    pynvml.nvmlInit()
    handle = pynvml.nvmlDeviceGetHandleByIndex(0)  # 假设获取第一个显卡
    above_50_count = 0
    below_50_count = 0
    while True:
        temperature = pynvml.nvmlDeviceGetTemperature(handle, pynvml.NVML_TEMPERATURE_GPU)
        client.publish(temperature_topic, temperature)
        if temperature > 50:
            above_50_count += 1
            below_50_count = 0  # 重置低于或等于 50 度的次数
            if above_50_count >= 20:
                client.connect(broker, port)
                client.publish(topic, "on")
                above_50_count = 0
                print(f"大于50度,启动风扇")
        elif temperature <= 50:
            below_50_count += 1
            above_50_count = 0  # 重置高于 50 度的次数
            if below_50_count >= 20:
                client.connect(broker, port)
                client.publish(topic, "off")
                below_50_count = 0
                print(f"小于等于50度,关闭风扇")
        print(f"当前 NVIDIA 显卡温度: {temperature} 度")
        time.sleep(3)

try:
    get_nvidia_temperature()
except KeyboardInterrupt:
    pynvml.nvmlShutdown()
    client.disconnect()


#别挂xxx的情况下:
# pip install pynvml
# pip install paho-mqtt


3、界面

4、打包

pip install pyinstaller
pyinstaller --onefile .\pc.py