首先我应该说我是Python和Kivy的初学者,所以请原谅我的问题很幼稚。
我试图让一个Kivy按钮运行一个命令on_press。这个命令定义在另一个属于同一个类的函数中。然而,我总是得到以下错误。
self.searchButton.bind(on_press=self.searchRecipe()) 文件 "kivy_event.pyx",第419行,在kivy._event.EventDispatcher.bind AssertionError: None是不可调用的
我已经看过类似的问题(此处 和 此处)但还是搞不清楚自己到底做错了什么。
我还应该补充一点,为了学习,我目前不想使用.kv文件,而是把所有的东西都包含在我的python脚本中。在对它有了很好的理解之后,我会尝试将一些部分迁移到.kv文件中。
下面是一个最小的(非工作)例子。当然,searchRecipe函数应该做的不仅仅是打印(连接到SQLite数据库并执行一些其他东西),但这只是一个尝试。
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
class RootWindow(BoxLayout):
def __init__(self, **kwargs):
super(RootWindow, self).__init__(**kwargs)
self.orientation = 'vertical'
self.searchButton = Button(text="Search")
self.searchButton.bind(on_press=self.searchRecipe())
self.add_widget(self.searchButton)
def searchRecipe(self):
print("It works!")
class RecipApp(App):
def build(self):
return RootWindow()
if __name__ == "__main__":
RecipApp().run()
self.searchButton.bind(on_press=self.searchRecipe())
self.searchRecipe()
评估为None。你想要的是 self.searchButton.bind(on_press=self.searchRecipe)
.