簡體   English   中英

使用 ROS 消息和 python 更新 kivy GUI 中的文本輸入字段

[英]Using ROS message and python to update text input field in kivy GUI

我嘗試設計一個 GUI 來通過 ROS、kivy 和 python 處理步進電機。 您可以在下面找到 GUI 的最小版本。 實際上,我想使用 ROS 消息來更新 kivy 文本輸入字段(只讀)。 在最簡單的例子中,按下按鈕應該將第一個輸入字段的數據通過本地 ROS 節點傳輸到第二個輸入字段。 實際上,rospy.Subscriber() 中的回調似乎沒有進入 Test 類。

感謝您的任何建議!

主文件

import kivy
kivy.require('1.7.2')

import rospy
from std_msgs.msg import String

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout

class Test(BoxLayout):
    text_is = 'text before button press'

    def Pub(self):
        publish = self.ids.test_text_pub.text
        try:
            ROSNode.new_text_is.publish(publish)
        except rospy.ROSInterruptException: pass

class ROSNode(Widget):

    def Callback(publish):
        print(publish.data) #check if Callback has been called
        test.text_is = publish.data

    new_text_is = rospy.Publisher('new_text_is', String, queue_size=10)
    rospy.Subscriber('new_text_is', String, Callback)

    rospy.init_node('talker', anonymous=True)

class TestApp(App):

    def build(self):
        return Test()

if __name__ == '__main__':
    TestApp().run()

測試.kv

#:kivy 1.0

<Test>:
    BoxLayout:
        orientation: 'vertical'

        Button:
            id: test_button
            text: 'publish'
            on_press: root.Pub()

        TextInput:
            id: test_text_pub
            text: 'text after button press'

        TextInput:
            id: test_text_sub
            text: root.text_is

如果您希望文本自動更新,則需要使用Kivy屬性

from kivy.properties import StringProperty
class Test(BoxLayout):
    text_is = StringProperty('text before button press')

Kivy屬性支持數據綁定,因此對該屬性的任何更新都將傳播到任何綁定的窗口小部件。 綁定會自動在kv中發生,因此在執行此操作時:

text: root.text_is

..您是在告訴Kivy,當root.text_is更新時,還要更新我的text

所以我找到了解決方案:

我必須向按鈕添加on_release事件。

on_release: test_text_sub.text = root.text_is

那么最終的代碼是什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM