2013-10-26 84 views
0

我添加了一個文本輸入窗口到我的Kivy APP,我試圖用窗口做兩件事。默認情況下,文本輸入窗口突出顯示雙擊的單詞。我想將這個單詞存儲到一個變量中,並且不知道如何將它從輸入窗口傳遞給一個變量。其次,我試圖從操作系統中剪切並粘貼到Kivy中,但無法弄清楚。任何幫助將非常感激。這是我迄今爲止的代碼。感謝Inclement幫助我實現這一目標。Kivy TextInput on_double_tap

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() 
+0

這是你正在測試的代碼嗎?此代碼中沒有TextInput。 –

+0

Qua-non,我將文本輸入框顯示在屏幕上,但是直到您寫下以下代碼,我不知道如何捕獲文本輸入。我發現kivy的學習曲線很困難,這是違反直覺的,因爲它是爲了讓事情變得簡單而設置的。我想這只是沒有點擊。感謝您的幫助,下面的代碼非常出色。 –

回答

1

只需重寫您的on_double_tap方法,如下所示。

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使用_cut, _copy and _paste functions。你不應該直接使用它們,因爲你只需要使用ctrl + c,x,v。

+0

當你設置文本輸入的原始文本,如使用行textinput = Test(text ='Hello world',size_hint =(0.5,1.0))是否有一種方法來重置文本輸入框新文字?當我在MouseWidget類中單擊鼠標時,我希望文本輸入中的文本發生更改。我可以從那裏訪問文本框嗎? –