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

2013-10-07 23:13:30 +08:00
 kehr
我在用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,会不会让自己贪多而不精呢?

希望前辈推荐一些这方面的文档或者书籍,可以的话能指点一下学习路线更是感激不尽!
5593 次点击
所在节点    Python
8 条回复
cooka
2013-10-07 23:33:52 +08:00
pygtk在mac下比pyqt麻烦得多, 提醒一点.
即使在windows下, 也是pyqt更方便, 虽然文件巨大.
kehr
2013-10-08 07:59:51 +08:00
@cooka 嗯,O(∩_∩)O谢谢~
cxshun
2013-10-08 09:22:46 +08:00
pyqt应该是用得比较多的吧,而且感觉pyqt学习起来方便点,gtk貌似挺麻烦的。
NahN2Regh
2013-10-08 19:16:27 +08:00
如果没有必要支持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
2013-10-09 03:53:07 +08:00
@NahN2Regh 真的非常感谢您能抽出时间,传授这么多宝贵的经验。这对我的学习非常有帮助,再次感谢!软件的python部分已经开发完成,准备用您的方式重写一遍。
NahN2Regh
2013-10-09 12:07:34 +08:00
@kehr 不客气. 设计界面时有遇到什么问题了, 可以随时找我探讨, 大家共同进步嘛.[email]Ui1oocei3eeb@163.com[/email]

真实的情况是, 我为了回答你这个问题, 才注册的v2ex帐号.
g0t3n
2013-11-18 11:14:08 +08:00
@NahN2Regh 怎么做到vim下 f4直接运行呢?还有就是本人想做个小东西能在linux,win下都能跑,感觉tkinter太轻量级了比如tree之类的没法做出来?没做过gui编程求教育
kehr
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

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

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

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

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

© 2021 V2EX