首页 > 解决方案 > 未捕获来自 Tkinter Gui 中 loop() 的 MQTT 事件

问题描述

我正在使用 MQTT 构建一个小型 Tkinter 应用程序。尽管 Tkinter mainloop() 占主导地位,但我尝试使用 Tkinter after() 和 MQTT loop() 函数轮询 MQTT 事件。但未处理事件“connecthandler”。我可以在我的 mqtt 服务器上看到连接。

任何提示将不胜感激

这是简化版:

#! /usr/bin/python3
import tkinter as tk
import paho.mqtt.client as mqtt

class App(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent)

        self.parent = parent

        self.initUI()
        self.initMQTT()
        
    def initMQTT(self):
        self.mqc=mqtt.Client()
        self.mqc.on_connect=self.connecthandler
        self.mqc.on_disconnect=self.disconnecthandler
        self.mqc.connect('localhost',1883,60)
        self.setMQTTPoll()

    def initUI(self):

        self.parent.title("MQTT")
        self.parent.geometry("%dx%d+%d+%d" % (100, 100, 100, 100))
        self.pack(fill="both", expand=True, side="top")

        self.parent.bind('<Button-3>', self.clickRight)
        self.parent.bind('q', self.leave)
        
    def leave(self, event="none"):
        self.quit()
    
    def clickRight(self, event="none"):
        print("rightClick")
    
    def connecthandler(self, obj, flags, rc):
        print("Connected to MQTT broker with rc=%d" % (rc))

    def disconnecthandler(self,obj, rc):
        print("Disconnected from MQTT broker with rc=%d" % (rc))
            
    def setMQTTPoll(self):
        self.after(300, self.mqttLoop)

    def mqttLoop(self):
        self.mqc.loop()
        self.setMQTTPoll()
        
 
if __name__ == "__main__":
    root = tk.Tk()
    App(root)
    root.mainloop()

标签: pythontkinterevent-handlingmqtt

解决方案


推荐阅读