Функция привязки кнопки Kivy с аргументом

Я пытаюсь узнать, как создать приложение в Kivy, и у меня проблема с отправкой аргумента функции. Я хочу отправить текст из ввода в функцию и распечатать его. Может кто-нибудь сказать мне, как я могу это сделать?

from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.textinput import TextInput from kivy.uix.button import Button class TutorialApp(App): def gratulation(self, *args): print args def build(self): boxLayout = BoxLayout(spacing=10,orientation='vertical') g = TextInput(text='Enter gratulation', multiline=False, font_size=20, height=100) button = Button(text='Send') button.bind(on_press=self.gratulation) boxLayout.add_widget(g) boxLayout.add_widget(button) return boxLayout if __name__ == "__main__": TutorialApp().run() 

    2 Solutions collect form web for “Функция привязки кнопки Kivy с аргументом”

    Yo должен получить текст из «g», а затем отправить его на обратный вызов кнопки, есть два способа сделать это, с помощью лямбда-функции или вызвать метод класса, приближающийся к нему.

    Лямбда Версия:

     from __future__ import print_function ##Need to import this for calling print inside lambda def build(self): boxLayout = BoxLayout(spacing=10,orientation='vertical') g = TextInput(text='Enter gratulation', multiline=False, font_size=20, height=100) button = Button(text='Send') buttoncallback = lambda:print(g.text) button.bind(on_press=buttoncallback) ... 

    Частичная версия:

     from functools import partial ##import partial, wich allows to apply arguments to functions returning a funtion with that arguments by default. def build(self): boxLayout = BoxLayout(spacing=10,orientation='vertical') g = TextInput(text='Enter gratulation', multiline=False, font_size=20, height=100) button = Button(text='Send') buttoncallback = partial(self.gratulation, g.text) button.bind(on_press=buttoncallback) ... 

    Один из способов сделать это:

     from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.textinput import TextInput from kivy.uix.button import Button class TutorialApp(App): def gratulation(self, instance): print(self.g.text) def build(self): boxLayout = BoxLayout(spacing=10,orientation='vertical') self.g = TextInput(text='Enter gratulation', multiline=False, font_size=20, height=100) button = Button(text='Send') button.bind(on_press=self.gratulation) boxLayout.add_widget(self.g) boxLayout.add_widget(button) return boxLayout if __name__ == "__main__": TutorialApp().run() 

    Надеюсь, поможет!

      Python - лучший язык программирования в мире.