QTask开发总结

一直想自己开发一些小程序,上次用Swing开发一个笔记软件,开发完后,感觉很痛苦,开发复杂度太高了,效率也非常低,总之觉得swing不太适合快速开发小软件。

这次想为开发一个任务列表的软件,其实需求很简单,最初打算用swing做,后来做到一半发现,太庞杂了。一方面是因为有太多过度设计,另一方面开始需求参考google来的,实际太复杂了。后来开始学Python后,打算用python来做。总的说来,还是比较满意最后的成果,两个文件就搞定,一个操作数据库,一个UI。

最初做想用Tk,但后来发现Tk资料比较少,再加上没找到Tree上画checkbox的方法,加上前面用Tk写过一个小的下载工具,发现经常莫名崩溃。后来选择了QT,使用PySide。感觉QT还是很不错,windows下也感觉挺美观,UI细节也不错。TreeView上直接支持Checkbox,而且还有半选中。开发中主要遇到的问题是监听函数修改checkbox状态,导致重复触发监听函数,后来采用item对象上增加属性来区别解决了这个问题。但再后来,遇上item.parent()和item.child(x)两个方法,会导致程序最后没办法正常退出,虽然不影响正常操作,但这也太郁闷了。我怀疑是因为我是win7 64bit 系统的原因。因为item.child(x)方法,我实在没找到好的方法来替代,最后只能选择放弃QT了。

然后选择了GTK,整个开发过程,还是很顺利,GTK的TreeView其实比较复杂,直接把列,渲染器这样的概念暴露在开发人员面前,对于没有经验的人来说,感觉就很复杂,GTK的TreeView设计很特别,渲染器很明显同Model分离,渲染器根据需要指定与Model的绑定关系,甚至样式参数都采用这种绑定,而且直接修改Model,GTK会立即反应修改。相对来说,GTK的TreeView还是比较灵活,同一列可以有多个渲染器,我就是一个列里放两个渲染器,一个是checkbox,另一个是Text。但GTK一些细节上还是不行,例如如果是两个渲染器在一列,你点checkbox就必须点两次(如果text是可以编辑的话),第一次是选中cell,第二次才真正反应到渲染器上。拖拽后,鼠标样式也开始出现问题。更加蛋疼的是,GTK居然不支持节点的垮父节点移动,如果是垮节点,你必须自己把所有节点,包括子节点,都做数据转移,也就是一行一行的insert再delete。这么多GUI,头一次遇上这样的(反正我只找到了同父节点的移动方法)。再后来,又遇上GTK与输入法的问题。当编辑节点文本时,如果切换为中文输入法(我用的搜狗),输入完后,回车退出编辑状态,然后再编辑另一个节点,这个时候中文输入法失效了。但这个时候输入法实际还在中文状态,如果想输入中文,也就必须切换回英文,再切换到中文。但如果你第一次编辑后,让GTK整个窗体失去焦点,再回来继续编辑节点,就表现正常,反正连续编辑就是不行。这个跟QT无法正常退出一样,我没招。后来改为增加一个对话框来编辑,算是可以保证连续编辑了。

另外,主流的python三大GUI库,wxPython、PySide/PyQt、PyGtk,只有PyGtk的封装是最python的,整个命名规则与python所提倡的一致。wxPython最倒胃口,这也是为什么我没选择wxPython的原因。

数据方面,用的是sqlite,数据库访问做了一个简单封装,参考的是网上一个例子,感觉做简单开发,这个封装完整足够了,也很不错。

打包用的py2exe。主要是为了后面做其他东西,要分发出去的话,就比较有用,但遇上把dll都打包到exe会无法启动问题,最后也没能解决。

总的说来,python开发效率是够的,即使遇上这么多问题,切换了两个UI库,但基本上还是感觉比用swing快。和swing不同的是,在UI上如果遇上一些问题,真的就没办法了,swing因为本身是java开发的,一些满足不了的问题,可以自己写代码搞定。但python因为基本都是封装c/c++的,所以基本不要考虑自定义或者复杂的扩展。不过对于简单的小程序,也真的不需要搞得那么复杂。简单而直接完成需求才是王道。

[img]http://dl.iteye.com/upload/attachment/412478/2a5e3499-941d-3857-81c8-eb75d0e2fd6d.jpg[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值