1
cooka 2013-10-07 23:33:52 +08:00 1
pygtk在mac下比pyqt麻烦得多, 提醒一点.
即使在windows下, 也是pyqt更方便, 虽然文件巨大. |
3
cxshun 2013-10-08 09:22:46 +08:00 1
pyqt应该是用得比较多的吧,而且感觉pyqt学习起来方便点,gtk貌似挺麻烦的。
|
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 可以读一下他的代码. |
5
kehr OP @NahN2Regh 真的非常感谢您能抽出时间,传授这么多宝贵的经验。这对我的学习非常有帮助,再次感谢!软件的python部分已经开发完成,准备用您的方式重写一遍。
|
6
NahN2Regh 2013-10-09 12:07:34 +08:00
@kehr 不客气. 设计界面时有遇到什么问题了, 可以随时找我探讨, 大家共同进步嘛.[email][email protected][/email]
真实的情况是, 我为了回答你这个问题, 才注册的v2ex帐号. |
7
g0t3n 2013-11-18 11:14:08 +08:00
@NahN2Regh 怎么做到vim下 f4直接运行呢?还有就是本人想做个小东西能在linux,win下都能跑,感觉tkinter太轻量级了比如tree之类的没法做出来?没做过gui编程求教育
|
8
kehr OP @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 |