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
相关产品推荐
相关产品推荐

