python - 未捕获来自 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()
解决方案
推荐阅读
- sql-server - T-SQL 渐变维度 - 多次更新,单次操作输出?
- c - 查找最大数的索引
- javascript - 如何修复 MongoDB 连接上的“MongoParseError: Multiple text records not allowed at ...”
- r - 如何用 igraph 计算最大瓶颈路径?
- r - Why manual autocorrelation does not match acf() results?
- c# - 启用将警告视为每个文件的错误
- xpath - Scrapy:以字符串和/或整数形式获取 HTML 类?
- bash - 如何使用目录中的文件前缀动态定义路径?
- java - 出现错误 - 没有符合条件的 bean 类型
- javascript - 如何在 Puppeteer 中找到 document.activeElement