on_press kivy 按钮中的事件未按预期工作
on_press event in kivy button not working as expected
下面是我的代码中的一小段。
问题:- 在加载屏幕 "X" 并传递一些参数时调用 get 函数。在 get 中,我创建了带有一些名称的按钮并分配了 on_press 事件。但问题是 on_press 事件在不按下按钮的情况下自动调用,下一个屏幕出现。
def get(self, service):
""" some code"""
but = Button(size_hint=(1, None))
but.text = str(i['name'][0][:10])
but.bind(on_press = self.change_screen(dict))
print "adding widget to home " + str(but)
self.home_box.add_widget(but)
def change_screen(self, dict):
self.screen_manager.current = 'Per_settings'
知道发生了什么吗?
but.bind(on_press = self.change_screen(dict))
您正在调用 self.change_screen(dict)
- 这是函数调用的正常 python 语法,绑定方法甚至不知道它,只传递调用的结果。
您必须传递函数本身。您可以使用 functools.partial 自动包含参数,但请注意 bind 也会传递额外的参数。
from functools import partial
but.bind(on_press=partial(self.change_screen, dict))
下面是我的代码中的一小段。
问题:- 在加载屏幕 "X" 并传递一些参数时调用 get 函数。在 get 中,我创建了带有一些名称的按钮并分配了 on_press 事件。但问题是 on_press 事件在不按下按钮的情况下自动调用,下一个屏幕出现。
def get(self, service):
""" some code"""
but = Button(size_hint=(1, None))
but.text = str(i['name'][0][:10])
but.bind(on_press = self.change_screen(dict))
print "adding widget to home " + str(but)
self.home_box.add_widget(but)
def change_screen(self, dict):
self.screen_manager.current = 'Per_settings'
知道发生了什么吗?
but.bind(on_press = self.change_screen(dict))
您正在调用 self.change_screen(dict)
- 这是函数调用的正常 python 语法,绑定方法甚至不知道它,只传递调用的结果。
您必须传递函数本身。您可以使用 functools.partial 自动包含参数,但请注意 bind 也会传递额外的参数。
from functools import partial
but.bind(on_press=partial(self.change_screen, dict))