You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:07:49