听到不少的评论说 python 不适合做带 UI 的程序,可我用了 kivy 之后觉得很强大,桌面的程序界面都能实现。网页程序就更不用说了,有强大的 django 框架,如果做前后端分离还有 django restful 或者 flask 。是不是说 python 不适合做带 UI 的程序的,都没好好用过这些 UI 库?

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