如何修复Kivy框架进制转换器运行报错、界面不显示问题
相关错误截图
问题描述
运行基于Kivy框架开发的Number System Converter(进制转换器)程序时,已安装全部运行所需依赖,但程序启动后界面无法正常加载。
程序源码地址:NumberSystemConverter-python
完整错误日志
Traceback (most recent call last): File "C:\Users\HP\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\kivy\lang\builder.py", line 700, in _apply_rule setattr(widget_set, key, value) File "kivy\weakproxy.pyx", line 35, in kivy.weakproxy.WeakProxy.__setattr__ File "kivy\properties.pyx", line 520, in kivy.properties.Property.__set__ File "kivy\properties.pyx", line 549, in kivy.properties.Property.set File "kivy\properties.pyx", line 748, in kivy.properties.NumericProperty.convert File "kivy\properties.pyx", line 769, in kivy.properties.NumericProperty.parse_list TypeError: Expected unicode, got float During handling of the above exception, another exception occurred: Traceback (most recent call last): File "c:\Users\HP\Downloads\Compressed\NumberSystemConverter-python-master\main.py", line 315, in <module> MyApp().run() File "C:\Users\HP\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\kivy\app.py", line 954, in run self._run_prepare() File "C:\Users\HP\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\kivy\app.py", line 924, in _run_prepare root = self.build() File "c:\Users\HP\Downloads\Compressed\NumberSystemConverter-python-master\main.py", line 311, in build return Container() File "C:\Users\HP\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\kivy\uix\boxlayout.py", line 145, in __init__ super(BoxLayout, self).__init__(**kwargs) File "C:\Users\HP\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\kivy\uix\layout.py", line 76, in __init__ super(Layout, self).__init__(**kwargs) File "C:\Users\HP\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\kivy\uix\widget.py", line 366, in __init__ self.apply_class_lang_rules( File "C:\Users\HP\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\kivy\uix\widget.py", line 470, in apply_class_lang_rules Builder.apply( File "C:\Users\HP\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\kivy\lang\builder.py", line 540, in apply self._apply_rule( File "C:\Users\HP\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\kivy\lang\builder.py", line 709, in _apply_rule raise BuilderException(rule.ctx, rule.line, kivy.lang.builder.BuilderException: Parser: File "c:\Users\HP\Downloads\Compressed\NumberSystemConverter-python-master\my.kv", line 255: ... 253: MDIconButton: 254: user_font_size: "32sp" >> 255: user_font_size:(dp(48), dp (48)) 256: icon: "delete-circle-outline" 257: pos_hint: {"center_x": .9, "center_y": .24} ... TypeError: Expected unicode, got float File "C:\Users\HP\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\kivy\lang\builder.py", line 700, in _apply_rule setattr(widget_set, key, value) File "kivy\weakproxy.pyx", line 35, in kivy.weakproxy.WeakProxy.__setattr__ File "kivy\properties.pyx", line 520, in kivy.properties.Property.__set__ File "kivy\properties.pyx", line 549, in kivy.properties.Property.set File "kivy\properties.pyx", line 748, in kivy.properties.NumericProperty.convert File "kivy\properties.pyx", line 769, in kivy.properties.NumericProperty.parse_list
错误原因
报错栈已明确指向项目目录下my.kv文件第255行,此处存在两处错误:
- 同一
MDIconButton组件重复声明user_font_size属性:第254行已将该属性赋值为"32sp",第255行再次对同一属性赋值,不符合KV语言规则 - 属性传参类型错误:
user_font_size是KivyMD中用于控制图标字体大小的数值类属性,仅接受单个带单位的字符串或数值参数,不支持元组格式输入。第255行传入的(dp(48), dp (48))是控件尺寸的传参格式,和该属性的要求完全不匹配,因此触发类型错误。
修复方法
打开项目中的my.kv文件,定位到第255行,直接删除整行错误配置user_font_size:(dp(48), dp (48))即可正常启动程序。
如果需要调整该删除按钮的控件尺寸,新增独立的size属性进行配置,不要将尺寸参数传入user_font_size属性。
内容的提问来源于stack exchange,提问作者mdX
相关产品推荐
相关产品推荐

