Python 带参数的Kivy按钮绑定函数
我正在尝试学习如何在Kivy中创建应用程序,但在向函数发送参数时遇到了问题。我想将输入文本发送到函数并打印它。谁能告诉我怎么做Python 带参数的Kivy按钮绑定函数,python,button,arguments,bind,kivy,Python,Button,Arguments,Bind,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 gratulatio
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()
一种方法是:
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()
希望有帮助 Yo必须从“g”中获取文本,然后将其发送到按钮回调,有两种方法可以做到这一点,一种是通过lambda函数,另一种是调用应用于它的类方法
Lambda版本:
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)
...
我只是初学者,但我说的对吗?我什么时候说你在属性“g”之前添加self并将其更改为public属性?哪个解决方案更好(你的或他的),为什么?@AndrewScott我会使用lambda版本,两者都可以,它们执行相同的操作。如果您想修改其他调用的打印行为,并将该行为保留在按钮调用上,我将使用部分调用,因此您只需更改您的方法,它将保留在回调上。