Mac 上的 KivyMD:运行 kitchen_sink 会在 kivytoast.py 中引发错误
Posted
技术标签:
【中文标题】Mac 上的 KivyMD:运行 kitchen_sink 会在 kivytoast.py 中引发错误【英文标题】:KivyMD on a Mac: running kitchen_sink raises an error in kivytoast.py 【发布时间】:2021-10-08 06:39:49 【问题描述】:在 Macbook Pro (Catalina) 上,Python 3.8,有兴趣使用 KivyMD 在 Kivy 中开发 android 应用程序。我采取了以下步骤来安装 KivyMD:
创建虚拟环境(virtmd),然后激活它(source /virtmd/bin/activate) 在这个虚拟环境中,通过 pip 安装了以下内容:Pillow, kivy git-cloned KivyMD 根据 GitHub 页面上建议的链接 运行 pip 安装。所有这些都无缝运行,没有任何故障或错误。 pip freeze 显示以下已安装项目:
证书==2021.5.30 charset-normalizer==2.0.4 docutils==0.17.1 idna==3.2 基维==2.0.0 基维花园==0.1.4 kivymd @file:///Users/robinhahn/PyProg/kvKivyMD/KivyMD 枕头==8.3.1 Pygments==2.9.0 请求==2.26.0 urllib3==1.26.6我正在关注 Codemy 视频教程,并注意到演示者的 pip freeze 显示了另外 4 个条目:
chardet==4.0.0 kivy-deps.angle==0.3.0 kivy-deps.glew==0.3.0 kivy-deps.sdl2==0.3.1cd 到 /demos/kitchen_sink 文件夹,运行 'python3 main.py' 失败,引发此错误,回溯的最后几行似乎集中在一个名为 kivytoast.py 的文件上:
File "main.py", line 144, in <module>
KitchenSinkApp().run()
File "/Users/robinhahn/PyProg/kvKivyMD/virtmd/lib/python3.8/site-packages/kivy/app.py", line 949, in run
self._run_prepare()
File "/Users/robinhahn/PyProg/kvKivyMD/virtmd/lib/python3.8/site-packages/kivy/app.py", line 944, in _run_prepare
self.dispatch('on_start')
File "_event.pyx", line 709, in kivy._event.EventDispatcher.dispatch
File "main.py", line 65, in on_start
Builder.load_file(
File "/Users/robinhahn/PyProg/kvKivyMD/virtmd/lib/python3.8/site-packages/kivy/lang/builder.py", line 306, in load_file
return self.load_string(data, **kwargs)
File "/Users/robinhahn/PyProg/kvKivyMD/virtmd/lib/python3.8/site-packages/kivy/lang/builder.py", line 373, in load_string
parser = Parser(content=string, filename=fn)
File "/Users/robinhahn/PyProg/kvKivyMD/virtmd/lib/python3.8/site-packages/kivy/lang/parser.py", line 402, in __init__
self.parse(content)
File "/Users/robinhahn/PyProg/kvKivyMD/virtmd/lib/python3.8/site-packages/kivy/lang/parser.py", line 508, in parse
self.execute_directives()
File "/Users/robinhahn/PyProg/kvKivyMD/virtmd/lib/python3.8/site-packages/kivy/lang/parser.py", line 472, in execute_directives
mod = __import__(package)
File "/Users/robinhahn/PyProg/kvKivyMD/virtmd/lib/python3.8/site-packages/kivymd/toast/__init__.py", line 11, in <module>
from .kivytoast import toast
File "/Users/robinhahn/PyProg/kvKivyMD/virtmd/lib/python3.8/site-packages/kivymd/toast/kivytoast/__init__.py", line 3, in <module>
from .kivytoast import toast
File "/Users/robinhahn/PyProg/kvKivyMD/virtmd/lib/python3.8/site-packages/kivymd/toast/kivytoast/kivytoast.py", line 72, in <module>
class Toast(BaseDialog):
File "/Users/robinhahn/PyProg/kvKivyMD/virtmd/lib/python3.8/site-packages/kivymd/toast/kivytoast/kivytoast.py", line 90, in Toast
self, instance_label: Label, texture_size: list[int, int]
TypeError: 'type' object is not subscriptable
还是有点新手,不太清楚如何从这里开始。 ETA:我在 VSCode 中提出了这个问题,最后一句话:
列表[int, int]
带有波浪线下划线,表示它是有问题的项目。我不知道 'type' object is not subscriptable 是什么意思或如何解决它。
感谢所有阅读和思考这个问题的人。
【问题讨论】:
【参考方案1】:我现在在同一门课程上,只是遇到了同样的问题。我按照“kivytoast.py”文件的路径更改了以下行(第 89 行):
def label_check_texture_size(self, instance_label: Label, texture_size: list([int, int])) -> NoReturn:
kivymd 开发人员似乎犯了一个错误,他们使用list[int, int]
而不是list([int,int])
。您也可以将其保留为[int,int]
,它的工作原理相同,因为它已经以列表格式显示。祝你课程的其余部分好运!
【讨论】:
这很好,谢谢!因此,这就是“将注释类型括在引号中”的含义......将 [int,int] 放在括号中。我确实尝试过文字引号,但是是的,这是 Python3。以上是关于Mac 上的 KivyMD:运行 kitchen_sink 会在 kivytoast.py 中引发错误的主要内容,如果未能解决你的问题,请参考以下文章
在 kivymd 的 __init__.py 文件中出现语法错误
无法连接到 android KivyMD 上的 mysql 数据库
KivyMD RecycleView 的 FPS 和延迟较低
KivyMD Xcode 构建错误 - ImportError: 动态模块未定义模块导出函数 (PyInit__imaging)