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.1

cd 到 /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)

Ubuntu 18.04 上的 KivyMD 安装错误

在 KivyMD 上的小部件之间添加数值