iT邦幫忙

0

各位前輩好 關於python def有些事想請教

  • 分享至 

  • xImage

小弟最近正在學習如何 使用esp8266接上感測器透過Mqtt把資料傳至Python GUI上

#樹莓派=MQTT伺服器

目前PYTHON 終端機可以印出MQTT傳來的資料
我想調用def內的字串把他拿到外面來套用variable 來讓label文字不斷更新

出現以下情形
https://ithelp.ithome.com.tw/upload/images/20200910/201265771jzE2RlDbC.png

出現問題的地方

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'))
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2020-09-10 15:37:54
最佳解答

參考這篇的說明
程式改成這樣試看看

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
/images/emoticon/emoticon06.gif

0
wrxue
iT邦好手 1 級 ‧ 2020-09-10 15:36:39

你在全域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'))

我要發表回答

立即登入回答