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
kehr
V2EX  ›  Python

我在开发一个软件,对于学习python的两个图形模块pygtk和pyqt,求点建议。

  •  
  •   kehr ·
    kehr · 2013-10-07 23:13:30 +08:00 · 5626 次点击
    这是一个创建于 4098 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我在用python开发一个小软件。用Tkinter做了个雏形。现在想用pygtk开发,而且已经着手学习。

    上官网查了一下资料,推荐使用PyGObject。目前在看The Python GTK+ 3 Tutorial,看了一半了,觉得参考的gtk api不好找,看个对象的方法还要去help(),用eclipse+pydev看的也不行,查了一下,模块是动态连接的.而且from gi.repository import Gtk还会报错,但不影响运行,或许这就是动态链接导致的吧。

    新手入门总是会遇到各种问题,作为学生党,目前这东西是一个人在搞,有点小困难(~傻笑~不过我喜欢~傻笑~)。

    由于The Python GTK+ 3 Tutorial,看了一半多了,还没找到PyGObject涉及的api for python参考手册,没法深入了解各个组件的方法和类说明,转过来看pyqt的话这几天的通宵努力就白费了。所以,希望由相关经验的前辈推荐些文档或书籍,最好是python api手册。

    还有就是,pyqt应该也很不错。目前The Python GTK+ 3 Tutorial完全能够帮我开发完成这个小软件。从学习的角度来说学习pyqt,会不会让自己贪多而不精呢?

    希望前辈推荐一些这方面的文档或者书籍,可以的话能指点一下学习路线更是感激不尽!
    8 条回复    1970-01-01 08:00:00 +08:00
    cooka
        1
    cooka  
       2013-10-07 23:33:52 +08:00   ❤️ 1
    pygtk在mac下比pyqt麻烦得多, 提醒一点.
    即使在windows下, 也是pyqt更方便, 虽然文件巨大.
    kehr
        2
    kehr  
    OP
       2013-10-08 07:59:51 +08:00
    @cooka 嗯,O(∩_∩)O谢谢~
    cxshun
        3
    cxshun  
       2013-10-08 09:22:46 +08:00   ❤️ 1
    pyqt应该是用得比较多的吧,而且感觉pyqt学习起来方便点,gtk貌似挺麻烦的。
    NahN2Regh
        4
    NahN2Regh  
       2013-10-08 19:16:27 +08:00   ❤️ 2
    如果没有必要支持windows系统的话, 推荐用PyGObject.

    gtk写起来很简单的, 尤其是gtk3, 引入了相当多的新功能, 绘制界面更给力! 还可以直接用CSS来定义软件的主题, 很灵活.
    在debian/ubuntu/fedora等系统里, 要做gtk的开发, 至少得安装这几个软件: devhelp用于查看API的, glade用于直接绘制软件界面的.

    glade是将界面转成了xml文件, gtk可以直接读取这类文件, 用GtkBuilder, GTkUIManger等;
    也可以手动来写界面的xml文件, 将像手写html文件那样, 刚才开始可能记不住, 但写几个之后就发现很容易;
    这两种方式设计的界面是跨语言的, C/C++/Python/Vala/...都是可直接用的.

    另外, 程序的样式可以单独放到一些CSS文件里.
    只用Python来实现程序的逻辑.

    这种方式就像写网页, 用html来做页面结构, CSS来控制样式, javascript控制逻辑.

    当然了, 你也可以把所有的工作都用python来做, 比如软件界面用python一点点来绘制, 样式的话也是.

    还有, gtk里可以直接使用cairo, 强大的2D矢量绘图库, 几行代码就可以实现很酷的特效.

    我的PyGObject的开发经验是, 使用bpython3来查gtk的api, 因为bpython3支持自动补全, 可以直接显示widget的所有方法, 包括父类的方法. 没有完整的PyGObject API, 因为它与gtk的C API几乎完全一样, 我认为也没必要存在.
    我还用glade来设计软件的大致结构, 然后用python来实现.
    样式的话, 很少用, 因为gtk3(gnome)的默认主题已经很好了.

    我用vim来写的, F4直接运行, 如果发现了界面的问题, 直接关闭; 然后修改代码, 再F4, 再确认是否存在问题. 我很喜欢这种快速反馈的方法, 写网页时也是这样的流程, 开发速度非常高.

    参考资料:
    入门的话, 可以看这个http://python-gtk-3-tutorial.readthedocs.org/en/latest/
    cairo的: http://zetcode.com/gfx/pycairo/
    更详细的是翻看devhelp里的API.

    另一个技巧是, 用glade来尝试着设计, 然后需要修改一个widget的某个属性时, 可以在右下角的属性设置里右键, 会在devhelp中定位相应的API, 这很直观.


    推荐一个有人最近发布的酷我音乐盒的 PyGObject实现: https://github.com/LiuLang/kwplayer
    可以读一下他的代码.
    kehr
        5
    kehr  
    OP
       2013-10-09 03:53:07 +08:00
    @NahN2Regh 真的非常感谢您能抽出时间,传授这么多宝贵的经验。这对我的学习非常有帮助,再次感谢!软件的python部分已经开发完成,准备用您的方式重写一遍。
    NahN2Regh
        6
    NahN2Regh  
       2013-10-09 12:07:34 +08:00
    @kehr 不客气. 设计界面时有遇到什么问题了, 可以随时找我探讨, 大家共同进步嘛.[email][email protected][/email]

    真实的情况是, 我为了回答你这个问题, 才注册的v2ex帐号.
    g0t3n
        7
    g0t3n  
       2013-11-18 11:14:08 +08:00
    @NahN2Regh 怎么做到vim下 f4直接运行呢?还有就是本人想做个小东西能在linux,win下都能跑,感觉tkinter太轻量级了比如tree之类的没法做出来?没做过gui编程求教育
    kehr
        8
    kehr  
    OP
       2013-12-15 19:44:47 +08:00
    @g0t3n 对于你的第一个问题,你需要在vimrc中定义你的f4快捷键功能,我的是f5直接运行。这是我的编译部分vimrc代码供参考:
    "C,C++ 按F5编译运行
    map <F5> :call CompileFile()<CR>
    func! CompileFile()
    exec "w"
    if &filetype == 'c'
    exec "!gcc % -o %<"
    exec "! ./%<"
    elseif &filetype == 'cpp'
    exec "!g++ % -o %<"
    exec "! ./%<"
    elseif &filetype == 'java'
    exec "!javac %"
    exec "!java %<"
    elseif &filetype == 'sh'
    :!chmod u+x %; ./%
    elseif &filetype == 'python'
    exec "!python %"
    "自动执行Makefile
    elseif expand("%") == 'Makefile' || expand("%") == 'makefile'
    exec "!make"
    endif
    "编译或者执行文件后清屏
    if &filetype == 'c' || &filetype == 'cpp' || &filetype == 'java' || &filetype == 'sh' || &filetype == 'python' || expand("%") == 'Makefile'||expand("%") == 'makefile'
    exec "!clear"
    endif
    endfunc
    "C,C++的调试
    map <C-F5> :call Debug ()<CR>
    func! Debug()
    if &filetype == 'c'|| &filetype == 'cpp'
    exec "w"
    exec "!g++ % -g -o %<"
    exec "!gdb ./%<"
    else
    exec "!echo '+++++++++++++++++++++++++++++++++++++++++';echo '+ +';echo '+ 当前编辑的不是C或CPP文件,无法调试! +';echo '+ +';echo '+++++++++++++++++++++++++++++++++++++++++'"
    endif
    exec "!clear"
    endfun g
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5441 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 06:01 · PVG 14:01 · LAX 22:01 · JFK 01:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.