Kivy TextInput on_double_tap

Я добавил окно ввода текста в мой Kivy APP, и я пытаюсь сделать две вещи с окном. Окно ввода текста по умолчанию выделяет слова, которые дважды щелкны. Я хочу сохранить это слово переменной и не могу понять, как передать его из окна ввода в переменную. Во-вторых, я пытаюсь вырезать и вставлять из ОС в 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 = *************())


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

 return root

if __name__ == '__main__':
 TESTApp().run()
</mousewidget>
1 ответ

Просто переопределите метод ************* как ************* ниже.

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


class Test(TextInput):

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

 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 использует _cut, _copy и _paste функции. Вам не нужно использовать их напрямую, kivy позаботится об этом, потому что вы просто используете ctrl + c, x, v.

licensed under cc by-sa 3.0 with attribution.