Kivy TextInput在双击时输入

Kivy TextInput在双击时输入,text,widget,kivy,Text,Widget,Kivy,我已经在我的Kivy应用程序中添加了一个文本输入窗口,我正在尝试用这个窗口做两件事。默认情况下,“文本输入”窗口会高亮显示双击的单词。我想把这个单词存储到一个变量中,但我不知道如何将它从输入窗口传递到一个变量。第二,我试图将操作系统中的内容剪切粘贴到Kivy中,但我无法理解。任何帮助都将不胜感激。这是我到目前为止的代码。感谢严酷帮我走到这一步 Builder.load_string(''' <MouseWidget>: image: image label: lab

我已经在我的Kivy应用程序中添加了一个文本输入窗口,我正在尝试用这个窗口做两件事。默认情况下,“文本输入”窗口会高亮显示双击的单词。我想把这个单词存储到一个变量中,但我不知道如何将它从输入窗口传递到一个变量。第二,我试图将操作系统中的内容剪切粘贴到Kivy中,但我无法理解。任何帮助都将不胜感激。这是我到目前为止的代码。感谢严酷帮我走到这一步

Builder.load_string('''

<MouseWidget>:
    image: image
    label: label
    orientation: 'vertical'
    Image:
        id: image
        source: root.source
    Label:
        id: label
        size_hint_y: None
        height: 50
        text: 'Test'
''')

class MouseWidget(BoxLayout):
    image = ObjectProperty()
    label = ObjectProperty()
    source = StringProperty()


    def on_touch_down(self, touch):
        if self.image.collide_point(*touch.pos):
            trigger = 0
            if touch.x >= 133 and touch.x <= 646 and touch.y >= 162 and touch.y <=675:
            self.label.text = str(touch.pos)


    def on_touch_up(self, touch):
        self.label.text = 'This is a test'



class TESTApp(App):
    def build(self):
        root = Accordion(orientation='horizontal')

        item= AccordionItem(title='Test')
        src = "image.png"
        image = MouseWidget(source=src, size_hint = (1.0, 1.0))

        textinput = TextInput(text='Hello world', size_hint = (0.5, 1.0))
        textinput.bind(text2 = on_double_tap())


        # add image to AccordionItem
        item.add_widget(image)
        item.add_widget(textinput)
        root.add_widget(item)

    return root

if __name__ == '__main__':
    TESTApp().run()
Builder.load\u字符串(“”)
:
图像:图像
标签:标签
方向:“垂直”
图片:
id:图像
来源:root.source
标签:
id:标签
尺寸提示:无
身高:50
文本:“测试”
''')
class MouseWidget(框布局):
image=ObjectProperty()
label=ObjectProperty()
source=StringProperty()
def on_触控向下(自身,触控):
如果self.image.collide_点(*touch.pos):
触发器=0

如果touch.x>=133,touch.x=162,touch.y只需覆盖双击的
方法,如下所示

from kivy.app import App
from kivy.uix.textinput import TextInput
from kivy.clock import Clock


class Test(TextInput):

    def on_double_tap(self):
        # make sure it performs it's original function
        super(Test, self).on_double_tap()

        def on_word_selection(*l):
            selected_word = self.selection_text
            print selected_word
            # do what you want with selected word here

        # let the word be selected wait for
        # next frame and get the selected word
        Clock.schedule_once(on_word_selection)

class TestApp(App):

    def build(self):
        return Test()


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

对于复制和粘贴,TextInput支持ctrl+x、c、v,TextInput内部使用。您不需要直接使用它们,kivy会处理这些问题,因为您只需使用ctrl+c、x、v即可。

这是您正在测试的代码吗?此代码中没有文本输入。Qua-non,我在屏幕上显示了文本输入框,但在您编写下面的代码之前,我不知道如何捕获文本输入。我发现kivy的学习曲线很难,这是违反直觉的,因为它的设置使事情变得简单。我想它只是还没有点击。感谢您的帮助,下面的代码工作得非常出色。qua-non,当您设置文本输入的原始文本时,例如使用行textinput=Test(text='Hello world',size_hint=(0.5,1.0))是否有方法用新文本重置文本输入框?我希望在MouseWidget类中单击鼠标时,文本输入中的文本发生更改。我可以从那里访问文本框吗?