Kivy 终于更新了,自 2020 年 release 后,这次主要还是针对 MacOS 的 ARM 兼容,请问有人深度用过这个框架吗,体验怎样。

2022-03-09 10:34:00 +08:00
 ChrisFreeMan
感觉 Python 的 GUi 框架坑都好多,很多人项目突然就不维护了,或者都是开发着玩玩的,靠爱发电果然走不远。
2854 次点击
所在节点    Python
11 条回复
ithz
2022-03-09 16:38:05 +08:00
pyqt 吧
ChrisFreeMan
2022-03-09 18:29:26 +08:00
@ithz 主要是看这个 kivy 支持全平台(包括 IOS/Android )想知道这个东西靠不靠谱,之前试过好几个到头来都掉坑里了
ClericPy
2022-03-09 21:33:10 +08:00
kivy 和 beeware... 用过的貌似都没夸它们的, 我就没上手
ChrisFreeMan
2022-03-09 21:37:24 +08:00
@ClericPy 看来还得去搞 swift 得了,一直因为 XCode 过于巨大而有点拒绝。。看来逃不开了。
ClericPy
2022-03-09 21:49:49 +08:00
@ChrisFreeMan
做 ios 的同学说现在不如以前那么香了. 而且还提到了 flutter 啥的
ChrisFreeMan
2022-03-09 21:54:55 +08:00
@ClericPy 没事,我就自己弄着玩而已。
Mocus
2022-03-11 18:51:13 +08:00
用过 Pyqt 和 Kivy ,都 2022 年了 Kivy 的中文支持还是稀烂,如果不是上课要教真的不想学
上课资料 https://github.com/CP1404/Starter
还是 Pyqt 香,之前用过 C++版本,上手很快
没试过 kivy 移动端开发
ChrisFreeMan
2022-03-11 19:05:12 +08:00
@Mocus 感谢回复,我也不知道为啥你们上课会教 Kivy ,其实中文支持对于我来说不是什么问题,我最关系的还是生产环境下的应用体验。pyqt 没有试过,但是它的商业许可让我觉得很困惑,我玩过很多 python 的 GUI 开发框架 pygame_gui 、pygame-muenu, toga(beeware), tkinter, pyglet ,说实话对它们都挺失望的,它们似乎都是一个试验品的感觉,而且是失败的那种。我现在是觉得 python 可以做很多事情,但是绝大部分事情都做不好的样子,除了上手快和简洁之外。有点失望,我是真心非常喜欢 python ,它是我的教父语言,担心现在真心觉得,还是深入学一学其他的编程语言。
ChrisFreeMan
2022-03-11 19:06:50 +08:00
@Mocus 错别字有点多见谅,发出去已经晚了,没法更正
BingoXuan
2022-03-13 14:28:53 +08:00
@ChrisFreeMan
那么多 python 的 gui 方案,我最后选了 pywebview 。毕竟 web 这种文档流编程实在简单。

说实话,Python 还是很多通点的。比如不支持复杂的匿名函数,不敢恭维的类型系统,一言难尽的 asyncio
ChrisFreeMan
2022-03-14 13:07:02 +08:00
@BingoXuan 其实 python 的 async IO 现在已经得到很大的改善了,现在最起码用起来比以前方便很多了。

我这个例子不知道能不能说明你的难处,关于将同步函数包装成异步函数执行。
```python
from http import client
from urllib import request as url_request
import time
import asyncio

URL = 'http://opendata2.epa.gov.tw/AQI.json'


async def a_open_url(url: str) -> str:
loop = asyncio.get_event_loop()
print('------')
rst: client.HTTPResponse = await loop.run_in_executor(
None,
url_request.urlopen, url
)
return rst.read().decode('utf8')


async def main() -> None:
start = time.time()
request_time = 4
rst = await asyncio.gather(*[a_open_url(URL) for _ in range(request_time)])
print([len(r) for r in rst])
print('spend time:', time.time()-start)

if __name__ == '__main__':
asyncio.run(main())

```

类型系统的话,说实在的我还没体会到有啥不便之处,配合 mypy 的类型检查,还有 flake8 的语法检查也是够用。基本我没有遇上无法类型注释的情况。

复杂的匿名函数感觉这个应该和 python 的设计理念冲突吧,因为本来就是靠缩进来区分层级的,所以精简表达很重要,如果加入复杂的匿名函数就会增加代码的复杂维度,纯个人看法。

最后关于 python 的 gui 编程,我还是先选择其他语言了,至于用 web 的技术去开发桌面 UI 其实用 python 本身的意义就不太大了,因为有更多更成熟,更靠谱的前端技术栈。哎,不过还是会作为我的最佳储备语言了,哪天好起来了还是会快速捡起来的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/839043

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX