이것은 내 코드입니다
import paho.mqtt.client as mqtt
import json
from tkinter import *
from tkmacosx import *
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.button = Button(frame, text="QUIT", fg="red", command=frame.quit)
self.button.pack(side=LEFT)
self.hi_there = Button(frame, text="Hello", command=self.say_hi)
self.hi_there.pack(side=LEFT)
def say_hi(self):
print("hi there, everyone!")
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("$SYS/broker/clients/connected")
def on_message(client, userdata, msg):
data = json.loads(msg.payload)
print(data)
root = Tk()
client = mqtt.Client()
app = App(root)
root.mainloop()
client.on_connect = on_connect
client.on_message = on_message
client.connect("test.mosquitto.org", 1883, 60)
client.loop_forever()
지금 무슨 일을하는지 너무 걱정하지 마세요. 내가 이해해야 할 것은 무한 루프의 개념입니다.
화면에 tkinter 창을 유지하려면 무한 루프가 필요합니다. 또한 MQTT 클라이언트 연결을 유지하려면 무한 루프가 필요합니다.
내 코드에서 이러한 무한 루프를 어떻게 배치합니까? client.loopforever () 앞에 root.mainloop ()를 배치하면 tkinter 창을 닫을 때만 MQTT 코드를 얻을 수 있습니다. client.loopforever () 뒤에 root.mainloop ()를 배치하면 MQTT 연결을 닫을 때 tkinter 창이 나타납니다.
아이디어는 브로커로부터 메시지를 가져 와서 tkinter 창에 표시하는 것입니다. 이 두 무한 루프의 위치를 이해하도록 도와주세요.
이벤트 루프가 이미 존재하는 경우 loop_forever()
사용해서는 안되지만 다음과 loop_start()
같습니다.
# ...
root = Tk()
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("test.mosquitto.org", 1883, 60)
client.loop_start()
app = App(root)
root.mainloop()
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다