Sri991
Sri991

Reputation: 391

how to bind two or more events with on_text_validate

I want that on pressing enter in a TextInput widget it should do two things-

  1. change the screen (i am using screen manager)

  2. and search for the keyword

I do know that with on_text_validate we can perform either of the tasks by-

1.root.manager.current='namesomething'

2.root.function_which_has_search_algorithm()

is there anyway with which i can do both the things(changing_the_screen,calling_the_search_function) using on_text_validate or do i have to use some other technique?

here a sample code:

import kivy
kivy.require("1.10.0")

from kivy.app import App 
from kivy.uix.screenmanager import ScreenManager,Screen 
from kivy.lang import Builder

Builder.load_file('screenswitch.kv')

class MainScreen(Screen):
    def SelectWord(self):
        ''' some search
                   code'''

class OtherScreen(Screen):
    pass

sm = ScreenManager()
sm.add_widget(MainScreen(name='main'))
sm.add_widget(OtherScreen(name='other'))

class ScreenSwitchApp(App):
    def build(self):
        return sm

obj = ScreenSwitchApp()
obj.run()

heres my kivy code:

<MainScreen>:
    BoxLayout:
        TextInput:
            text: "Search your word here"
            color: 1,1,1,1
            id: search_input
            width: 200
            size_hint: None, .20
            pos_hint: {"center_x": .5, "center_y": 0.5}
            multiline: False
            on_text_validate: root.SelectWord() # i want this to change screen also


<OtherScreen>:
    BoxLayout:
        Button:
            text: 'back to main screen'
            on_press: root.manager.current='main'

Upvotes: 0

Views: 415

Answers (2)

Nadeem
Nadeem

Reputation: 93

        TextInput:
                id:qty_inp
                size_hint_x:.1
                multiline:False
                on_text_validate:root.update_price()
                on_text_validate:root.update_purchase

Like the above code you can add one more on_text_validate: root.method()

Upvotes: 0

eyllanesc
eyllanesc

Reputation: 244212

A possible solution is to create a new function that calls that 2 functions:

*.py

import kivy
kivy.require("1.10.0")

from kivy.app import App 
from kivy.uix.screenmanager import ScreenManager,Screen 
from kivy.lang import Builder

Builder.load_file('screenswitch.kv')

class MainScreen(Screen):
    def some_function(self):
        self.SelectWord()
        self.manager.current='other'

    def SelectWord(self):
        print("SelectWord")

class OtherScreen(Screen):
    pass

sm = ScreenManager()
sm.add_widget(MainScreen(name='main'))
sm.add_widget(OtherScreen(name='other'))

class ScreenSwitchApp(App):
    def build(self):
        return sm

obj = ScreenSwitchApp()
obj.run()

*.kv

<MainScreen>:
    BoxLayout:
        TextInput:
            text: "Search your word here"
            color: 1,1,1,1
            id: search_input
            width: 200
            size_hint: None, .20
            pos_hint: {"center_x": .5, "center_y": 0.5}
            multiline: False
            on_text_validate: root.some_function() # i want this to change screen also


<OtherScreen>:
    BoxLayout:
        Button:
            text: 'back to main screen'
            on_press: root.manager.current='main'

Upvotes: 1

Related Questions