Kivy中Button绑定callback回调函数报错无该属性如何解决
Kivy按钮绑定报错修复方案
核心错误原因
callback方法缩进错误:你将callback定义在了__init__方法内部,不属于Kivy_ui类的实例方法,因此调用self.callback时会触发AttributeError。需要将callback调整到和__init__同级的缩进位置,成为类的公开方法。- 事件名错误:Kivy Button组件没有
on_click点击事件,正确的事件名为on_press。 - 其余语法错误:代码存在多处缩进不规范问题,
Popup初始化参数缺失逗号也会触发语法错误。
修复后完整代码
from kivy.app import App from kivy.uix.gridlayout import GridLayout from kivy.uix.textinput import TextInput from kivy.uix.label import Label from kivy.uix.button import Button from kivy.uix.image import Image from kivy.uix.popup import Popup class Kivy_ui(GridLayout): def __init__(self,**kwargs): super().__init__(**kwargs) self.rows= 2 # 定义行数 self.cols = 3 # 定义列数 self.image = Image( source = 'background.jpg' ) self.add_widget(self.image) self.label = Label( text = 'Enter your name' ) self.add_widget(self.label) self.text_input = TextInput( text ='' ) self.add_widget(self.text_input) self.button = Button( text = 'submit' ) # 修正为正确的点击事件名on_press self.button.bind(on_press=self.callback) self.add_widget(self.button) # 弹窗定义 self.popup = Popup( title='Pop_UP display', size= (300,400), # 弹窗尺寸 content = Label( text='' ) ) # 修正缩进,成为类的实例方法 def callback(self, elem): self.popup.content.text = self.text_input.text self.popup.open() class demoap(App): def build(self): return Kivy_ui() if __name__ == '__main__': demoap().run()
修复后运行代码,在输入框填写内容点击submit按钮,即可正常弹出显示输入内容的弹窗。
内容的提问来源于stack exchange,提问作者sudarshan regmi
相关产品推荐
相关产品推荐

