小弟最近正在學習如何 使用esp8266接上感測器透過Mqtt把資料傳至Python GUI上
#樹莓派=MQTT伺服器
目前PYTHON 終端機可以印出MQTT傳來的資料
我想調用def內的字串把他拿到外面來套用variable 來讓label文字不斷更新
出現以下情形
出現問題的地方
var = tk.StringVar()
var.set(msgs)
# 當接收到從伺服器發送的訊息時要進行的動作
def on_message(client, userdata, msg):
# 轉換編碼utf-8才看得懂中文
global msgs
msgs = (msg.topic+" "+ msg.payload.decode('utf-8'))
print(msg.topic+" "+ msg.payload.decode('utf-8'))
參考這篇的說明
程式改成這樣試看看
msgs = ""
var = tk.StringVar()
var.set(msgs)
# 當接收到從伺服器發送的訊息時要進行的動作
def on_message(client, userdata, msg):
# 轉換編碼utf-8才看得懂中文
global msgs
msgs = (msg.topic+" "+ msg.payload.decode('utf-8'))
print(msg.topic+" "+ msg.payload.decode('utf-8'))
不過就算解決了 not defined 的問題
恐怕也不會如預期的顯示訊息
因為在 var.set(msgs) 時可能 on_message 可能還沒被 triggered
你在全域msgs
要先設定一遍
msgs = ""
var = tk.StringVar()
var.set(msgs)
# 當接收到從伺服器發送的訊息時要進行的動作
def on_message(client, userdata, msg):
# 轉換編碼utf-8才看得懂中文
global msgs
msgs = (msg.topic+" "+ msg.payload.decode('utf-8'))
print(msg.topic+" "+ msg.payload.decode('utf-8'))