如何在Kivy中实现文本输入框的显示?代码问题求助
解决Kivy自定义部件显示问题的方案
嘿,我来帮你搞定这个Kivy的问题!你的kv代码其实没问题,但Python部分确实漏了关键步骤,我一步步给你讲清楚:
首先,你的Python代码里的核心错误
你在TextInputTest类里写的__init__方法完全不对——Kivy的App类是靠build()方法来返回应用的根部件的,而不是在__init__里返回TextInput对象,而且你还没调用父类的初始化方法,这会导致App的生命周期出问题。
修正后的完整代码
1. Python文件(比如命名为text_input_test.py)
from kivy.app import App from kivy.uix.boxlayout import BoxLayout # 不需要单独定义AnswerInput类,因为你已经在kv里用<AnswerInput@BoxLayout>创建了自定义部件 class TextInputTest(App): def build(self): # build方法返回应用的根部件,这里直接返回我们自定义的AnswerInput实例 return AnswerInput() if __name__ == '__main__': TextInputTest().run()
2. kv文件(必须命名为textinputtest.kv,和你的App类名小写对应,Kivy会自动加载它)
<AnswerInput@BoxLayout>: orientation: "vertical" BoxLayout: height: "40dp" size_hint_y: None TextInput: size_hint_x: 20 Button: text: "Check Answer" size_hint_x: 25
额外说明(帮你理解为什么这么改)
- Kivy的App类会自动寻找和类名(小写)匹配的kv文件,比如你的App类是
TextInputTest,kv文件就要叫textinputtest.kv,放在和Python文件同一个文件夹里就行。 - 你在kv里用
<AnswerInput@BoxLayout>定义了一个继承自BoxLayout的自定义部件,这个部件会被Kivy自动注册,所以在Python的build()方法里可以直接实例化它。 - 如果不想单独用kv文件,也可以把kv代码直接写在Python里,用
Builder.load_string()加载,比如:
from kivy.app import App from kivy.lang import Builder # 直接加载kv字符串 kv_code = ''' <AnswerInput@BoxLayout>: orientation: "vertical" BoxLayout: height: "40dp" size_hint_y: None TextInput: size_hint_x: 20 Button: text: "Check Answer" size_hint_x: 25 ''' Builder.load_string(kv_code) class TextInputTest(App): def build(self): return AnswerInput() if __name__ == '__main__': TextInputTest().run()
这样改完之后,运行Python文件就能看到你定义的文本输入框和按钮啦!
内容的提问来源于stack exchange,提问作者SendViaAirmail
相关产品推荐
相关产品推荐

