郁闷于Python GUI开发,有没有好的框架啊?

2012-01-14 22:13:44 +08:00
 ectotherm
Tkinter是最好的,但是在OS X上有几个硬伤:1. 不支持原生快捷键;2. 不支持中文输入。

wxPython比较复杂,通过下载2.9的代码可以在OS X Lion上构建64位版本,但是通过easy_install或者pip死活也装不上。而且这个框架太复杂了,远远超过了我的预期。

PyObjC也太复杂了,而且不是一个纯Python的东西,还要用到Interface Builder,快速开发时候非常痛苦。

PyGUI,在pip上没找到。

还有推荐的吗?最好就是Tkinter解决中文输入的问题就万事大吉了。
19900 次点击
所在节点    Python
43 条回复
ectotherm
2012-01-15 16:32:43 +08:00
@HowardMei 哦,看晕了,我还指望直接pip install pywebkitgtk完事了,看来是不行。算了,坚守tkinter,然后想办法搞个wxtkinter吧,gui实在太花我的时间了
harmy
2012-01-15 16:49:46 +08:00
你可以去看看kivy能否满足需求
http://kivy.org/
ectotherm
2012-01-15 17:44:55 +08:00
@harmy 折腾了半天,安装上了,但是hello world都没运行起来,需要pil pycairo等等
ectotherm
2012-01-15 20:16:19 +08:00
刨去中文输入的问题,Tkinter真的是一个非常方便的框架。开发完全符合Pythonic的精神。
ant_sz
2012-01-15 20:54:20 +08:00
pyQT?
loading
2012-01-15 21:01:45 +08:00
其实我是看到python能网络开发又能gui开发才选的,现在发现gui开发是如此纠结=_=
skywinger
2012-01-15 21:16:19 +08:00
干嘛都不喜欢用java呢?java的gui是真正的跨平台通行的一个非常好的方案。
ant_sz
2012-01-15 21:39:50 +08:00
@skywinger Java的GUI? 效率还是不太好啊。。。
ectotherm
2012-01-15 22:13:27 +08:00
@ant_sz @ant_sz @skywinger @loading 用过C++开发qt和wx,就知道有多痛苦了。Python的优点不在于网络或者是什么特别的方面。而是在于它作为原型语言的优势,这点目前只有java能与之媲美。但是java信奉的是自上而下的类型模型(什么东西都是object,然后继承、实现下来),而Python具有duck type的特性,所以在大量面向对象开发的过程中,Python的继承层次非常浅,而且内置了和Ruby的mixins相当的多重继承特性,抽象层次高非常多。

我从95年开始搞C++开发,到05年全线换成Python,倒不是因为我觉得Python能做比C++更多的事情,而是因为用它开发实在高效(不是它运行高效),用来思考复杂的问题非常容易。

另外拿qt和python比是不恰当的,当然我知道qt和wx包含完整的、各种功能的类型、操作等等。不过C++致命的问题就是没有很好的统一性,打个比方说:我接触过n个C++库,就有n中表示字符串的类型。std::string、Ogre::String(typedef std::string)、CEGUI::String、QString、wxString等等。

之前用wxWidgets做了两个C++项目,还有wxPython写了一个完整的编辑器项目。因为太熟悉了,所以我知道wxPython本身的复杂性。前阵子用Tkinter开发了几个项目,让我有醍醐灌顶的感觉:这才是我需要的GUI库。我原来以为所谓的RAD需要有一个GUI Builder之类的东西。Tkinter让我用区区几行代码搞定任何复杂的问题。

当然我是说在Windows上的Tkinter,在我的OS X上,Tkinter就没正常支持过中文输入。前阵子自己写了个wxTkinter,最后放弃这个项目,原因很简单:我不想让开发GUI的时间大于我做其他工作的时间。
ant_sz
2012-01-15 22:38:36 +08:00
@ectotherm (话说跑题了233)

Python也是我的首选编程语言,不用说太多话去描述他,仅仅是
:Simple, Sometimes native!

我还是挺喜欢Qt的,至少在编译成机器码的这些GUI里面,这个我用起来最顺手。毕竟有时候是有硬件密集型的需求的。Qt原生支持的OpenGL(商业版还支持D3D)这个挺好。Qt是一个很成熟很完善的框架,且都是对原生API的封装,而不是建立自己的图形层。

至于Java,不是我黑他,GUI方面他就是一悲剧,效率实在太低。开发效率也一般,也不喜欢繁文缛节的包名称和函数名称(庞大的库里很多函数恨不得用函数名把这个函数描述一遍,这个受不了,再加上不喜欢用IDE,没啥代码提示的情况下)。反正个人是不喜欢Java,虽然他是我第一门系统学习的编程语言
ectotherm
2012-01-15 22:42:03 +08:00
@ant_sz java号称名词王国,这也是我也python不用java的原因
ant_sz
2012-01-16 05:46:09 +08:00
@loading 其实纯Qt也可以啊,Qt不光是图形库,他还包含了从XML解析器到Webkit的全套lib,包括Networking,加上C++写出来,效率还是不错的。另外,Qt对C++做了一些扩展,可以实现for in这样比较方便的语法。

如果需要一些没有被包含的API,就混杂ObjectiveC进去混合编译咯,是可以做到的。Qt本身就是一种Native的封装。

不过比较纠结的就是Qt毕竟就没有Python这类脚本语言高开发效率。
est
2012-01-16 09:17:46 +08:00
skywinger
2012-01-16 09:36:44 +08:00
@ant_sz @ectotherm 那为啥Java的GUI像你们说得这么不堪,那Android、或是之前的KJava平台的手机纷纷使用java来做手机的GUI应用呢?
ectotherm
2012-01-16 09:44:25 +08:00
@skywinger 因为人们对移动设备效率、反应速度等各方面的要求比台机宽松非常多,心理决定了一切
laiwei
2012-01-16 09:50:58 +08:00
还是 继续用 wxpython吧
ectotherm
2012-01-16 09:53:33 +08:00
@laiwei 我是这样打算的,用Tkinter开发,一方面试图解决不能输入中文的问题,另外一方面继续着手开发wxTkinter吧,实在找不到一个比Tkinter还简便的库了
bhuztez
2012-01-16 10:33:39 +08:00
@ectotherm Coccinella就是用Tcl/Tk写的,上次我用的时候,没觉得输入中文有问题 http://coccinella.im/
ectotherm
2012-01-16 10:51:20 +08:00
@bhuztez 你确定是在osx上吗?为什么我的还是不行?甚至用快捷键打开输入法都不行?
ectotherm
2012-01-16 11:28:02 +08:00
@skywinger 突然想起一个事情来,网上一篇谈论为什么android的界面没有ios流畅的分析,你可以参考下。我搞了两年多的cocoa开发了,在这之前从来没有一个gui framework会把特效的功能默认加入到界面设计当中。

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

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

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

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

© 2021 V2EX