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

PyCharm启动Kivy时TextInput不显示、窗口黑屏挂起如何解决

问题根因

现有kv写法存在布局逻辑错误:

  • 根组件ExampleWidget继承自基础Widget类,该类不会自动管理子组件的布局约束
  • 手动给子级BoxLayout硬绑定center: root.center、width: root.width、height: root.height的写法,在加载TextInput时会触发递归布局重算死循环:TextInput自带的尺寸适配、交互渲染逻辑会反复触发父组件布局刷新,形成死锁,最终导致窗口黑屏、程序无响应。
  • 替换为Button时能正常显示属于偶发容错:Button默认尺寸固定,不会触发反复重算逻辑,不代表原有写法是正确的。
  • 日志中MTD设备权限警告为Linux环境下Kivy尝试读取触控输入设备的常规提示,和本次故障无关。
正确实现方案

推荐使用布局类作为根容器,完全避免手动硬绑定尺寸位置的冗余写法:

修改Python代码

将根组件的父类从Widget替换为BoxLayout:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout


class ExampleWidget(BoxLayout):
    pass


class ExampleApp(App):
    def build(self):
        return ExampleWidget()


if __name__ == '__main__':
    ExampleApp().run()

修改kv布局文件

删除BoxLayout上冗余的尺寸、位置绑定属性,直接声明三个TextInput子组件即可:

#:kivy 2.1.0

<ExampleWidget>:
    TextInput:
        text: "First"
    TextInput:
        text: "Second"
    TextInput:
        text: "Third"

如果必须保留基础Widget作为根组件,不要硬绑定尺寸位置属性,改用Kivy标准的布局提示属性即可,kv写法调整为:

#:kivy 2.1.0

<ExampleWidget>:
    BoxLayout:
        pos_hint: {"center_x": .5, "center_y": .5}
        size_hint: 1, 1
        TextInput:
            text: "First"
        TextInput:
            text: "Second"
        TextInput:
            text: "Third"

内容的提问来源于stack exchange,提问作者lofidevops

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:27:22