
听到不少的评论说 python 不适合做带 UI 的程序,可我用了 kivy 之后觉得很强大,桌面的程序界面都能实现。网页程序就更不用说了,有强大的 django 框架,如果做前后端分离还有 django restful 或者 flask 。是不是说 python 不适合做带 UI 的程序的,都没好好用过这些 UI 库?
1 laike9m 2020 年 8 月 31 日 至少就桌面程序来说 Python 很合适。PyQt 那么成熟,还有 Kivy 、BeeWare ( https://beeware.org/) 这些能写一次代码在各端(包括移动端)执行的框架。当然你非要和 Java/Swift 比移动端那肯定没法比。 网页是另一码事了,毕竟 Django 自带的模板功能还是不如各种 MVVM 框架强大,但对于简单的网页也够了 |
2 KarPy 2020 年 8 月 31 日 linux 和 mac 端不了解,但大多数的客户端 UI 程序,都是运行在 win 上的,win 上做客户端 UI 程序,py 和 c#比,没有一点点的优势啊,就生态来说,py 确实不适合做客户端 UI 。 语言各有各的优势领域,不能指望 py 干一切啊。 |
3 a719114136 2020 年 8 月 31 日 |
4 love 2020 年 8 月 31 日 因为现在写界面 html+js 才是王道 |
5 LokiSharp 2020 年 8 月 31 日 主要是 iOS 、macOS 避不开 Obj-C 、Swift,Windows 避不开 C++、C#,Android 避不开 Java 、Kotlin 。 使用任何非平台第一语言,都没法直接利用平台专属特性,比如硬件加速之类的跨平台框架适配得不怎么样。 |
8 across 2020 年 8 月 31 日 做 UI 交互做到所见即所才算合格,有个完善的 UI 编辑器才叫好用 有个 UI 库充其量就是能实现 UI 。 |
9 CallMeReznov 2020 年 8 月 31 日 winform: 你说的对,你们说的都对。 |
10 sudoy OP @LokiSharp 确实,我用 kivy 的时候还得安装 Microsoft Visual C++ 编译器才行。目前倒是没有用到硬件加速这么底层的东西,所以感觉也还可以 |
11 Leonard 2020 年 8 月 31 日 你还不如指望 js 干一切 |
15 Trim21 2020 年 8 月 31 日 via Android 感觉写个 server 再写套前端都比写这些原生 ui 库舒服… |
16 imn1 2020 年 8 月 31 日 pyqt5 我光做两个功能就写了一个多星期,当然也有我写得慢的原因 1.免重启切换界面语言文字 2.免重启切换颜色、暗亮模式 这些 qt designer 搞不定 人家说的是不适合,不是不能做 |
17 zion03 2020 年 8 月 31 日 via Android Windows 平台 UI 开发还是 WPF 最强大 |
18 minami 2020 年 8 月 31 日 python 打包发布恶心的一笔,pyqt 还有 license 问题 |
19 LFee 2020 年 8 月 31 日 py 打包的问题挺多的吧?反正我遇到过,可能是我菜,不会解决?弄了一次之后就不敢打包了 |
20 shintendo 2020 年 8 月 31 日 django flask 也能算 UI 库吗 |
21 SWALLOWW 2020 年 8 月 31 日 做 wpf 的在此,有活吗 |
22 steptodream 2020 年 8 月 31 日 @shintendo 你估计连人家说的啥都没读明白 就直接回复了 |
23 aydd2004 2020 年 8 月 31 日 用 python 写 gui 就是找不自在 不管什么平台 |
25 zkliangliang 2020 年 8 月 31 日 kivy 是不错的, 开发起来挺顺畅的,额....,就是打包嘛... -----"污中生友, 富婆无限" |
26 SergeGao 2020 年 8 月 31 日 django,flask 跟 UI 库有毛线关系...如果要跑在浏览器里的话你不用 html,js 用啥... |
27 supercaizehua 2020 年 8 月 31 日 haha 我也喜欢 python 干一切,但很多时候你还是迫不得已去学习新的语言 |
28 smallpython 2020 年 8 月 31 日 python 适合写 GUI, 不过通常来说有平台专用的语言就没人选他了 |
29 Mithril 2020 年 8 月 31 日 能做一件事和能做好是有本质上的区别的。。。 |
30 g00001 2020 年 8 月 31 日 桌面软件 Windows 一家独大, https://github.com/aardio/wubi-lex https://github.com/iuuniang/win2ray-2 像这类桌面软件,分分钟出界面,生成的 EXE 几百 KB,不要任何运行库,Python 做不到,C#更不行,JS 同样搞不定。 |
31 iptables 2020 年 8 月 31 日 PyQt5 是 GPL 的,PySide2 是 LGPL 的 |
32 CallMeReznov 2020 年 8 月 31 日 @g00001 #30 aardio 是吊,不过这类东西感觉都是灰色时代常用反而现在正常开发都用不到的 |
34 tlday 2020 年 8 月 31 日 看到标题的第一反应是 GIL 导致高刷新 UI 的掉帧卡顿。 想了想,应该还有不支持多线程与坑爹的异步 API,基本所有在做 UI 的东西都是支持多线程( UI 主线程)或者对于异步有第一优先级的支持的。这两点支持并不好的 python 应该只能靠其他语言的 adapter 来做 UI,肯定掣肘良多。 至于你说 django 和 flask 能做 UI,本质上做 UI 的是前端"御三家",前端中的 UI 主线程实际上是由 html/css 间接控制的浏览器渲染引擎,加一个用来支持"动态特性"的 js (独立线程)。django 和 flask 在 UI 里面扮演的角色无非一个“给数据”。没有“渲染引擎”的场合,都是需要自己控制 UI 主线程的,UI 主线程中一般也要求不能做重量级操作,不然也会导致 UI 卡顿甚至卡死。 |
35 shintendo 2020 年 8 月 31 日 @steptodream “网页程序就更不用说了,有强大的 django 框架,如果做前后端分离还有 django restful 或者 flask 。是不是说 python 不适合做带 UI 的程序的,都没好好用过这些 UI 库” 愿意听听你的理解 |
36 chengxiao 2020 年 8 月 31 日 pyQt 写起来还是很舒服的,当然这依赖于 QT 的强大 |
37 simple2025 2020 年 8 月 31 日 为什么你们写界面都那么厉害,而我只能对着 pyqt 无能狂怒?想写的东西写不出来? 难道都会 C++? |
38 supermoonie 2020 年 8 月 31 日 via iPhone 可以尝试通过 pycef 加载本地页面 |
39 secondwtq 2020 年 8 月 31 日 这个问题吧,有点像在茅台论坛里面问”为什么肯德基不好吃?百事可乐喝起来不是挺爽的吗?“ 我先把手头这个板烧鸡腿堡吃完再说 ... |
40 darknoll 2020 年 9 月 1 日 因为 mvvm 的框架写界面更好,winform 那种真的太落后了。 |
41 xuboying 2020 年 9 月 1 日 嫌弃 gil 的试试 3.8 的 sharedmemory |
42 myCupOfTea 2020 年 9 月 1 日 ...我以为现在都是 electron 干一切|_|〃,就是文件大了点 |
43 sudoy OP @shintendo @steptodream 感谢回复,可能是我没有表达清楚,但也没有必要争议。Django 当然不是 UI 库,这点常识大家都知道。做后端渲染的网页程序 django 可以一步到位,做前端渲染(也就是前后端分离)的 django 也有 restful 可以提供 api 。前端那里肯定是前端三件套( html/css/js )这毫无疑问 |
44 sudoy OP @myCupOfTea electron 可以做到很漂亮,但是体验感觉还是没有调用本地 UI 库的好 |
45 charlie21 2020 年 9 月 1 日 这是一个话语权的问题,Windows 觉得 Windows 桌面软件的话语权在自己手里所以它推 WPF,你觉得你是 python 熟手你的话语权在自己手里 所以你干啥都用 python 。基本上结果就是如果自己搞可以按自己的知识储备来,如果是 ...... 金子就是用来埋没的。反正大家都有眼无珠这么多年也是过来了 |
46 myCupOfTea 2020 年 9 月 2 日 @sudoy 但是开发效率差距太大了 |
47 Windyzhou   2024 年 12 月 23 日 via Android @sudoy #43 楼主,你 kivy 是怎么安装的,在 win 下吗?据说只能在 linux 下安装,可是我跑 buildozer Android debug 搞了一天都没搞好,据说第一次安装要 1 个小时左右。 |
48 sudoy OP @Windyzhou 我好久没用 kivy 了,你这么一问,我刚才试了一下,两三分钟就装好了。环境如下: Windows 11, 64 位 用到的命令如下: 1. 新建一个文件夹 2. 创建 python 虚拟环境: python -m venv kivy_venv 3. 激活虚拟环境: kivy_venv\Scripts\activate 4. 安装 kivy: python -m pip install "kivy[base]" 5. 创建一个简单的 ui 文件, 命名为 app.py , 文件内容在最底下。 6. 运行就出来 UI 界面了 python app.py ``` from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Button from kivy.uix.textinput import TextInput class CalculatorApp(App): def build(self): # Main layout layout = BoxLayout(orientation='vertical', padding=10, spacing=10) # Text input for display self.display = TextInput( multiline=False, readOnly=True, halign='right', font_size=32, size_hint_y=0.2 ) layout.add_widget(self.display) # Create buttons layout buttOns= [ ['7', '8', '9', '/'], ['4', '5', '6', '*'], ['1', '2', '3', '-'], ['.', '0', 'C', '+'] ] # Add button grid for row in buttons: h_layout = BoxLayout() for label in row: button = Button( text=label, pos_hint={'center_x': 0.5, 'center_y': 0.5} ) button.bind(on_press=self.on_button_press) h_layout.add_widget(button) layout.add_widget(h_layout) # Add equals button equals_button = Button( text='=', size_hint_y=0.2, background_color=[1, 0, 0, 1] # Red color ) equals_button.bind(on_press=self.on_solution) layout.add_widget(equals_button) return layout def on_button_press(self, instance): current = self.display.text button_text = instance.text if button_text == 'C': # Clear the display self.display.text = '' else: # Add the button text to display self.display.text = current + button_text def on_solution(self, instance): try: # Evaluate the expression self.display.text = str(eval(self.display.text)) except: self.display.text = 'Error' if __name__ == '__main__': CalculatorApp().run() ``` |