转载:http://www.cnblogs.com/harrychinese/archive/2011/10/27/python_gui_program_dev_env.html
打算用python写点gui程序, 之前听说过python的gui库有 wxPython, pyQt, Google后, 又有两个候选项目, pygtk, Tkinter. 选项真够多的, 有时候选项多了, 也不是什么好事. 花了我大把时间搜索和试用.
选择的智慧
1. pyQt听说有个很好用的Designer, 但pyQt的license不怎么友好. 只支持GPL和收费 license.
2. pygtk的license为LGPL, Glade这个Designer也不错, 只是pygtk设计出的gui在windows显示爆丑.
3. wxPython 的Designer一大堆, 比较下来 wxFormBuilder 算是最好的一个Designer了, 不仅能提供所见即所得的功能,还能生成python源码, 其他designer多生成xrc(xml格式)文件. wxPython自带的Demos是一个不错的资源, 可以参照着学习.
4. Tkinter这个比较冷门
这么看下来, 最好的选择算是wxPython了, 即使是最好用的wxFormBuilder 和Visual Studio以及Delphi的 窗口设计器相比, 简直是差的太多了, 怎么用都不够顺手. 这事, 随作罢.
今天突然有点感觉, 写这个gui程序, 也是在Windows上使用, 干嘛非抱着跨平台不放. 这么一想就豁然开朗了, 使用IronPython + Windows Form吧. 下了个sharpdevelop 4.1, 随手写了几行代码, 感觉一个字, 爽!
结论: 用python 写gui程序, 我的选择: .Net4.0+ IronPython + Windows Form, IDE为 sharpdevelop 4.1。
稍微写点使用总结:
1. 在project加了reference后, 仍必需在program.py中通过clr.AddReference('YourAssemblyName'). 其实在project增加reference的动作, 仅仅是让sharpdevelop能支持该assembly的智能提示, 所以可以认为, project中增加reference是一个多余的操作.
2. FormMain中要是使用FormAbout, 应该在FormMain.py中import FormAbout类, 格式是, from FormAbout import FormAbout
3. 调试方式运行器不是很可靠, 代码有问题有时候会直接关掉运行进程, 根本没有机会看运行进程的输出信息. 最好是配合使用非调试运行器来获得更多的信息.
4. SharpDevelop几乎没有python语言的智能提示, 仅仅能提供对引入的assembly的智能提示, 所以最好是结合pydev(Eclipse)一起开发. 由SharpDevelop来设计界面和包装相关assembly, 由pydev来编写一般python的代码.
5.目前SharpDevelop的FormsDesigner还有部分的限制, 比如不支持timer等, 详见:
http://community.sharpdevelop.net/blogs/mattward/archive/2009/05/12/IronPython2FormsDesigner.aspx
The IronPython forms designer is not yet complete and the following are some of the known limitations.
No support for project or local form resources.
No support for icons.
Incomplete support for ToolStripItems and menu strips.
Incomplete support for ListViewItems.
No support for TreeViewItems.
Incomplete support for non-visual components (e.g. Timers).
Controls needed to be fully namespace qualified.
另外开源Python UI框架:Kivy影响特别深, 跨平台:win/linux/mac os/Android, 可通过代码建构和模版两种方式完成gui生成. 值得一试.
中文简介: 开源Python UI框架:Kivy
http://www.showmuch.com/article/article_144.html
官网guide
http://kivy.org/docs/guide-index.html
提到了IronPython, 自己稍微点评一下IronPython 和 PTVS(python tools for VS, 可集成在免费的VS2010 Shell中)
1. IronPython, 除了能很好地利用WinForm/WPF form/SL实现gui外, 我实在看不出这个有其它意义, IronPython的类库数量上和CPython没法比, 而且也不能跨平台.
2. PTVS官网说, 提供更好的智能提示. 经我的试用, 从支持python语言特性来讲, 但和pydev相比, 还差不少
3. PTVS尚不支持win form 可视化设计. sharpdevelop 完美支持. sharpdevelop 的python插件作者真强啊.
4. PTVS使用要引入YourAssemblyName, 需要将YourAssemblyName路径加到project的search path中(或者放到GAC中), 然后, 在startup file中使用clr.AddReference('YourAssemblyName')引入, 但PTVS不能对assembly类库做智能提示. sharpdevelop 支持assembly的智能提示.
5. PTVS不仅支持ironPython, 而且支持CPython. 我觉得支持cpython意义不大, 支持cpython的IDE优秀很多, 而且多为跨平台.
6. PTVS 对HPC Cluster和cloud infra的支持, 值得期待!
下面是在搜索过程中, 找到的几个gui框架的参考文章, 虽然我以后不打算使用 wxPython 和pygtk, 还是决定将它们放着做个记号吧.
wxPython wxFormBuilder 入门
http://www.leigao.org/blog/archives/421
pygtk Glade 使用
http://www.yeezi.org/2011/05/pygtk-tutorial-pygtk-indroduction.html