【发布时间】:2018-09-23 11:12:12
【问题描述】:
我尝试使用导航抽屉将值从 MQTT 传递到 Kivy 仪表板。
有人可以提示我如何更改变量吗? 这是我的示例代码。 MQTT 正在工作。 我使用 Python 3.6.6 和 1.10.1。
mainmenu.py
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.garden.navigationdrawer import NavigationDrawer
from kivy.properties import StringProperty
import paho.mqtt.client as mqtt
class Drawer(NavigationDrawer):
vartext1 = StringProperty("Button")
vartext2 = StringProperty("Text")
class MainMenuApp(App):
def build(self):
return Drawer()
def on_start(self):
topic = "kivy/#"
def onConnect(client, userdata, flags, rc):
mqttc.subscribe(topic, 0)
def onMessage(client, userdata, msg):
msg.payload = msg.payload.decode("utf-8")
print ("[INFO ] [MQTT ] topic: " + msg.topic +" msg: "+ msg.payload)
if msg.topic == "kivy/button":
vartext1 = msg.payload
if msg.topic == "kivy/text":
vartext2 = msg.payload
mqttc = mqtt.Client(client_id="kivy-client", clean_session=True)
mqttc.on_connect = onConnect
mqttc.on_message = onMessage
mqttc.connect("10.0.0.104", 1883, keepalive=60, bind_address="")
mqttc.loop_start() # start loop to process callbacks! (new thread!)
if __name__ == "__main__":
MainMenuApp().run()
mainmenu.kv
<Drawer>:
# Side panel
BoxLayout:
padding: 30
Button:
text: root.vartext1
# Main panel
BoxLayout:
padding: 30
Label:
text: root.vartext2
【问题讨论】:
-
什么是
toggle_state?请提供minimal reproducible example -
点击button2,左侧弹出导航菜单。
-
我从帖子中删除了不必要的部分。
-
你能接受答案吗?
标签: python kivy navigation-drawer mqtt kivy-language