Это мой код
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()
Не беспокойтесь о том, что он делает сейчас. Что мне нужно понять, так это концепция бесконечных циклов.
Мне нужен бесконечный l oop, чтобы окно tkinter оставалось на экране. Мне также нужен бесконечный l oop, чтобы поддерживать соединение с клиентом MQTT.
Как мне расположить эти бесконечные циклы в моем коде? Если я помещаю root .mainl oop () перед client.loopforever (), я получаю код MQTT только когда закрываю окно tkinter. Если я помещаю root .mainl oop () после client.loopforever (), то при закрытии соединения MQTT открывается окно tkinter.
Идея состоит в том, чтобы получить сообщения от брокера и показать их в окне tkinter. Пожалуйста, помогите мне понять, где расположить эти две бесконечные петли.