Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ROS消息和python更新kivy GUI中的文本输入字段_Python_User Interface_Message_Kivy_Ros - Fatal编程技术网

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

使用ROS消息和python更新kivy GUI中的文本输入字段,python,user-interface,message,kivy,ros,Python,User Interface,Message,Kivy,Ros,我试图通过ROS、kivy和python设计一个GUI来处理步进电机。您可以在下面找到GUI的最低版本。实际上,我想使用ROS消息来更新kivy文本输入字段(只读)。在最简单的示例中,按下按钮应将第一个输入字段的数据通过本地ROS节点传输到第二个输入字段。实际上,rospy.Subscriber()中的回调似乎没有进入测试类 谢谢你的建议 main.py import kivy kivy.require('1.7.2') import rospy from std_msgs.msg impor

我试图通过ROS、kivy和python设计一个GUI来处理步进电机。您可以在下面找到GUI的最低版本。实际上,我想使用ROS消息来更新kivy文本输入字段(只读)。在最简单的示例中,按下按钮应将第一个输入字段的数据通过本地ROS节点传输到第二个输入字段。实际上,rospy.Subscriber()中的回调似乎没有进入测试类

谢谢你的建议

main.py

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()
试验电压(千伏)

#: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 1.0
:
盒子布局:
方向:“垂直”
按钮:
id:测试按钮
文本:“发布”
on_press:root.Pub()
文本输入:
id:test_text_pub
文本:“按下按钮后的文本”
文本输入:
id:test\u text\u sub
text:root.text\u是

如果希望文本自动更新,则需要使用

Kivy属性支持数据绑定,因此对属性的任何更新都将传播到任何绑定的小部件。绑定在kv中自动发生,因此在执行此操作时:

text: root.text_is

…您告诉Kivy,当
root.text\u更新时,也更新我的
text

因此我找到了解决方案:

我不得不在按钮上添加一个on_释放事件

on_release: test_text_sub.text = root.text_is

这并没有解决问题。我想这是因为抄袭者的回叫。
on_release: test_text_sub.text = root.text_is