V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ectotherm
V2EX  ›  Python

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

  •  
  •   ectotherm ·
    axplus · 2012-01-14 22:13:44 +08:00 · 19846 次点击
    这是一个创建于 4698 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Tkinter是最好的,但是在OS X上有几个硬伤:1. 不支持原生快捷键;2. 不支持中文输入。

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

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

    PyGUI,在pip上没找到。

    还有推荐的吗?最好就是Tkinter解决中文输入的问题就万事大吉了。
    43 条回复    1970-01-01 08:00:00 +08:00
    xhacker
        1
    xhacker  
       2012-01-14 22:28:11 +08:00
    PySide
    tokki
        2
    tokki  
       2012-01-14 22:35:06 +08:00
    python 要什么gui阿-。- gui果断obj-c去
    ultragtx
        3
    ultragtx  
       2012-01-14 22:50:02 +08:00
    QT咋样 不过我也没用过
    ectotherm
        4
    ectotherm  
    OP
       2012-01-14 23:05:31 +08:00
    @tokki 因为写了一个本机的search engine,用web.py做界面,后台还要运行一个daemon,太痛苦了。所以想写成gui,又不想用python之外的东西重写。之前用tkinter在windows上是好好的,但lion上不能输入中文,硬伤。
    ectotherm
        5
    ectotherm  
    OP
       2012-01-14 23:06:16 +08:00
    @ultragtx @xhacker qt比wx更重量级,不用说pyside,单单在lion上装qt就是很痛苦的事情
    ectotherm
        6
    ectotherm  
    OP
       2012-01-14 23:07:54 +08:00
    @tokki 对了最主要的问题是:如果我那天我另外写了几个app,如果每个在后台都运行一个daemon,占内存不说,没事还给我抽两下
    dndx
        7
    dndx  
       2012-01-14 23:09:06 +08:00
    @ectotherm 直接用Browser解决多简单,HTML和CSS就是专门干这个的。
    ectotherm
        8
    ectotherm  
    OP
       2012-01-14 23:10:45 +08:00
    @dndx 因为写了一个本机的search engine,用web.py做界面,后台还要运行一个daemon,太痛苦了。所以想写成gui,又不想用python之外的东西重写。之前用tkinter在windows上是好好的,但lion上不能输入中文,硬伤。对了最主要的问题是:如果我那天我另外写了几个app,如果每个在后台都运行一个daemon,占内存不说,没事还给我抽两下
    for4
        9
    for4  
       2012-01-14 23:31:23 +08:00
    lz说过的几个都考虑过 最终选的wxpy 配合wxFormBuilder 还不错
    ectotherm
        10
    ectotherm  
    OP
       2012-01-14 23:37:29 +08:00
    @for4 关键在lion上安装wx 2.9.3的非常痛苦,要自己下载源码来编译,本来开发工作的重头应该在search engine本身的效率逻辑上,所以我不想花太多精力在gui上。其实tkinter我用的是很爽了,就是在lion上不能输中文。tkinter的开发方式完全符合我的要求。有没有人写个像wxtkinter之类的东西
    gDD
        11
    gDD  
       2012-01-14 23:37:48 +08:00
    大家都没提到PyGTK。。。
    HowardMei
        12
    HowardMei  
       2012-01-14 23:40:38 +08:00
    ectotherm
        13
    ectotherm  
    OP
       2012-01-14 23:46:17 +08:00
    @gDD 看了tortoisehg的界面,我觉得不会比tkinter的好看多少,估计还复杂,不过可以了解看看
    ectotherm
        14
    ectotherm  
    OP
       2012-01-15 13:01:36 +08:00
    @gDD 哈哈哈,在lion安装不了gtk,因为没有gcc
    ectotherm
        15
    ectotherm  
    OP
       2012-01-15 13:03:25 +08:00
    @HowardMei 这个东西依赖于gtk,lion安装不了,没戏
    gDD
        16
    gDD  
       2012-01-15 14:04:37 +08:00 via iPod
    ectotherm
        17
    ectotherm  
    OP
       2012-01-15 14:24:32 +08:00
    @gDD 我知道通过下载源码编译可以,但是通过brew需要gcc,这跟我直接下载wxpython的代码来编译没什么区别,我要的就是最简便的方案。

    下载源代码编译的方案看起来可行,但是我手头有3台mac,这样做起来就太麻烦了。所以最好有一个方案全部搞定的,tkinter就是这样的方案,问题我需要处理中文。
    est
        18
    est  
       2012-01-15 14:54:17 +08:00
    PyGUI不需要pip啊,纯.py文件,调用很方便的。
    ectotherm
        19
    ectotherm  
    OP
       2012-01-15 15:39:05 +08:00
    @est 没找到啊,包叫什么来着?
    HowardMei
        20
    HowardMei  
       2012-01-15 15:54:57 +08:00
    @ectotherm 呵呵,你被它名字弄迷糊了吧,我刚开始也是,直到看到这个:
    http://fcamel-life.blogspot.com/2011/09/pythonwebkit.html
    名字里有GTK未必就直接依赖于GTK,难道就不能自带干粮?官方文档里:
    The GTK+ port of WebKit is intended to provide a browser component for the portable GTK+ UI toolkit. WebKitGTK+ is developed within the official WebKit SVN, so the codebase is unrelated to the classic GTK+ WebCore, but WebKitGTK+ has superseded Gtk+ WebCore. The WebKit Buildbot provides continuous build and layout tests.

    unrelated有木有?所以,它是被独立出来,放在webkit里面的,在MacOS上build方法和Linux一样简单:
    https://trac.webkit.org/wiki/BuildingGtk

    很久以前bookmark的一个列表,看能不能让你偷到懒 :-)
    case 1:http://www.gnu.org/software/pythonwebkit/
    http://www.notedit.com/2010/11/python-webkit-dom-bindings/

    case 2:Titanium Desktop SDKs Community Edition:
    http://www.slideshare.net/jhaynie/desktop-applications-using-html-and-javascript
    http://www.appcelerator.com/products/plans-pricing/

    case 3:PyjamasDesktop(PyWebkitGtk): provides a simpler and more powerful alternative to python-wxWidgets, PyGtk2 and PyQt4.
    http://pyjd.org/

    case 4:http://code.google.com/p/onering-desktop/

    case5:http://code.google.com/p/phantomjs/
    https://github.com/Roejames12/phantomjs (pyphantomjs)

    case6:
    http://awesomium.com/

    这些大部分都用webkit做UI render,可以自己加上bottle.py做ajax backend,以求在普通性能需求下用html+css搞定大部分界面互动。

    不过这都是走黄老邪的路子,远不如 QT/wxPython 来得成熟,也不如tkinter完整,所以不见得能节省时间。
    ectotherm
        21
    ectotherm  
    OP
       2012-01-15 16:32:43 +08:00
    @HowardMei 哦,看晕了,我还指望直接pip install pywebkitgtk完事了,看来是不行。算了,坚守tkinter,然后想办法搞个wxtkinter吧,gui实在太花我的时间了
    harmy
        22
    harmy  
       2012-01-15 16:49:46 +08:00
    你可以去看看kivy能否满足需求
    http://kivy.org/
    ectotherm
        23
    ectotherm  
    OP
       2012-01-15 17:44:55 +08:00
    @harmy 折腾了半天,安装上了,但是hello world都没运行起来,需要pil pycairo等等
    ectotherm
        24
    ectotherm  
    OP
       2012-01-15 20:16:19 +08:00
    刨去中文输入的问题,Tkinter真的是一个非常方便的框架。开发完全符合Pythonic的精神。
    ant_sz
        25
    ant_sz  
       2012-01-15 20:54:20 +08:00
    pyQT?
    loading
        26
    loading  
       2012-01-15 21:01:45 +08:00 via Android
    其实我是看到python能网络开发又能gui开发才选的,现在发现gui开发是如此纠结=_=
    skywinger
        27
    skywinger  
       2012-01-15 21:16:19 +08:00
    干嘛都不喜欢用java呢?java的gui是真正的跨平台通行的一个非常好的方案。
    ant_sz
        28
    ant_sz  
       2012-01-15 21:39:50 +08:00
    @skywinger Java的GUI? 效率还是不太好啊。。。
    ectotherm
        29
    ectotherm  
    OP
       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
        30
    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
        31
    ectotherm  
    OP
       2012-01-15 22:42:03 +08:00
    @ant_sz java号称名词王国,这也是我也python不用java的原因
    ant_sz
        32
    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这类脚本语言高开发效率。
    skywinger
        34
    skywinger  
       2012-01-16 09:36:44 +08:00
    @ant_sz @ectotherm 那为啥Java的GUI像你们说得这么不堪,那Android、或是之前的KJava平台的手机纷纷使用java来做手机的GUI应用呢?
    ectotherm
        35
    ectotherm  
    OP
       2012-01-16 09:44:25 +08:00
    @skywinger 因为人们对移动设备效率、反应速度等各方面的要求比台机宽松非常多,心理决定了一切
    laiwei
        36
    laiwei  
       2012-01-16 09:50:58 +08:00
    还是 继续用 wxpython吧
    ectotherm
        37
    ectotherm  
    OP
       2012-01-16 09:53:33 +08:00
    @laiwei 我是这样打算的,用Tkinter开发,一方面试图解决不能输入中文的问题,另外一方面继续着手开发wxTkinter吧,实在找不到一个比Tkinter还简便的库了
    bhuztez
        38
    bhuztez  
       2012-01-16 10:33:39 +08:00
    @ectotherm Coccinella就是用Tcl/Tk写的,上次我用的时候,没觉得输入中文有问题 http://coccinella.im/
    ectotherm
        39
    ectotherm  
    OP
       2012-01-16 10:51:20 +08:00
    @bhuztez 你确定是在osx上吗?为什么我的还是不行?甚至用快捷键打开输入法都不行?
    ectotherm
        40
    ectotherm  
    OP
       2012-01-16 11:28:02 +08:00
    @skywinger 突然想起一个事情来,网上一篇谈论为什么android的界面没有ios流畅的分析,你可以参考下。我搞了两年多的cocoa开发了,在这之前从来没有一个gui framework会把特效的功能默认加入到界面设计当中。
    ant_sz
        41
    ant_sz  
       2012-01-16 20:00:25 +08:00
    @skywinger Android的GUI系统是谷歌自己虚拟机提供的,不是SUN(或者说现在的甲骨文的JVM),不是标准Java框架的一部分,应该独立出来称为dalvik,谷歌仅仅是使用Java作为开发语言而已。其实我应该说的准确点,Java默认自带的SWING图形框架挺扯的。

    举个例子,Eclipse打开的时候,连加载提示页面都得好几秒才能弹出、、、SWING就是个悲剧。当初学习Java的这个部分,写的Hello World弹出都相当慢。

    至于J2ME 这类在手机上运行的Java,他的图形库是比较轻量级的。效率尚在可以接受的范围内,但是相比Android乃至其他的图形框架还是差的多。

    iOS上的图形系统和MacOSX上还是有些不同的,iOS上的所有UI都默认强制OpenGL渲染,MacOSX上则还是允许CPU渲染的。所以iOS更流畅一点也还是就容易理解了。

    本人对Android的图形渲染还是比较认可的。之所有有时候会感觉略卡。我觉得还有大部分安卓机默认的触摸操作采样效率都比较低等其他一些原因。
    aisk
        42
    aisk  
       2012-01-24 19:49:06 +08:00
    @ant_sz dalvik是谷歌的虚拟机实现 不是GUI系统;Eclipse是SWT写的而不是Swing
    ectotherm
        43
    ectotherm  
    OP
       2012-01-24 21:11:42 +08:00
    还有一个选择:jython
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2584 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 81ms · UTC 00:04 · PVG 08:04 · LAX 16:04 · JFK 19:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.