Python Kivy运行报AssertionError: Button对象不可调用问题求助
问题原因
- 命名冲突:你将按钮实例赋值给了
self.submit属性,绑定on_press事件时传入的也是self.submit,此时该变量指向的是Button组件对象,不是可调用的函数,因此触发不可调用的报错。 - 回调方法作用域错误:你定义的
Pressed方法写在了gridlayout类的外部,不属于类的成员方法,类内部无法正常访问到该回调函数。 - 额外的拼写模块警告属于可选问题:你导入了
kivy.core.spelling但未安装依赖库enchant,该警告不影响主逻辑运行,只是拼写相关功能无法使用。
解决方案
按以下要求修改代码即可正常运行:
- 将
Pressed方法的缩进调整到gridlayout类内部,使其成为类成员方法 - 修改事件绑定代码,将
on_press的绑定目标改为回调函数self.Pressed - 可选:如果不需要拼写相关功能,删除
from kivy.core.spelling import *导入行即可消除对应的警告信息
修改后的完整代码如下:
from kivy import * from kivy.app import * from kivy.core.window import * from kivy.lang.builder import * from kivy.properties import * from kivy.uix.colorpicker import * from kivy.uix.gridlayout import * from kivy.uix.scrollview import * from kivy.uix.textinput import * from kivy.uix.widget import * from kivy.uix.button import * from kivy.uix.label import * label="Source Text" class gridlayout(GridLayout): def __init__(self, **kwargs): super(gridlayout, self).__init__(**kwargs) self.cols = 1 self.inside = GridLayout() self.inside.cols = 2 self.inside.add_widget(Label(text=label)) self.SourceText = TextInput(multiline=True) self.inside.add_widget(self.SourceText) self.cols = 1 self.submit = Button(text="Submit") self.submit.bind(on_press=self.Pressed) self.add_widget(self.inside) self.add_widget(self.submit) def Pressed(self,instance): # SourceText = self.SourceText.text # label = SourceText print("SourceText") class SBAP(App): def build(self): return gridlayout() if __name__ == '__main__': SBAP().run()
改动说明
- 调整了
Pressed方法的缩进,将其纳入gridlayout类的作用域内 - 将事件绑定代码从
self.submit.bind(on_press=self.submit)修改为self.submit.bind(on_press=self.Pressed) - 删除了未使用的
kivy.core.spelling导入,消除了对应的依赖警告
内容的提问来源于stack exchange,提问作者Derek Neilson
相关产品推荐
相关产品推荐

