一直想自己开发一些小程序,上次用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++的,所以基本不要考虑自定义或者复杂的扩展。不过对于简单的小程序,也真的不需要搞得那么复杂。简单而直接完成需求才是王道。

- 大小: 105.4 KB
分享到:
相关推荐
qtask 是在创建时传入的函数的持久队列,该函数处理稍后传入的数据 工作正在进行中 用法 var request = require ( 'request' ) ; var Queue = require ( 'qtask' ) ; var q = new Queue ( { throttle : 100 , ...
Q任务 QTask是用于管理任务的基于Qt的开源图形用户界面。 它基于 (一种流行的命令行组织器)。特征 该应用程序的目标是允许用户使用大多数键盘快捷键来快速管理任务列表,同时仍然具有用户友好的图形用户界面。 您...
chromedriver-win64-136.0.7059.0.zip
python学习一些项目和资源
python学习资源
python学习资源
python学习教程
python学习教程
【毕业设计】java-springboot+vue会议管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
内有各个系统的版本全了
分数阶模型辨识,分数阶模型辨识
大数据基于python的电影天堂数据可视化(源码+配套文档) 系统功能: 登录 、首页 、电影数据管理 、我的信息 关键技术:Python、Django、Mysql、Hadoop、Scrapy、Vue、B/S 技术支持:已测试可正常运行,调试问题可联系客服有偿解决。 更多项目:3000+优质源码,支持【定制】、修改、部署、讲解和文档。
【毕业设计】java-springboot+vue疾病防控综合系统的设计与实现源码(完整前后端+mysql+说明文档+LunW).zip
【毕业设计】java-springboot-vue家具销售电商平台实现源码(完整前后端+mysql+说明文档+LunW).zip
134dfffffffffffffffffffffffffffffff
代码说明: 设置结束时间:通过new Date().getTime()获取当前时间戳,并加上10分钟的毫秒数(10 * 60 * 1000),得到倒计时的结束时间。 更新倒计时:updateCountdown函数计算当前时间与结束时间的差值,并将其转换为分钟和秒数。 显示倒计时:通过console.log输出剩余时间,格式为“剩余时间:X分Y秒”。 停止倒计时:当剩余时间小于或等于0时,清除定时器并输出“时间到!”。 定时器:使用setInterval每秒调用一次updateCountdown函数,实现倒计时的动态更新。 扩展说明: 应用场景:倒计时功能常用于限时抢购、考试计时、活动倒计时等场景。 优化建议:可以将倒计时显示在网页的某个元素中,而不是控制台。例如,使用document.getElementById获取DOM元素并更新其内容。 兼容性:该代码在现代浏览器中均可运行,如果需要兼容旧版浏览器,可以使用var代替const和let。 扩展功能:可以添加声音提示、动画效果等,提升用户体验。
该项目是一个大学生校园兼职平台。该平台使用Java语言开发后台业务逻辑,运用了SpringMVC+Spring+MyBatis框架进行搭建,前台使用jQuery、layUI框架,数据库服务器采用MySQL5.6+对数据进行持久化。其主要功能有:兼职招聘、论坛交流、在线聊天、个人中心、信箱留言、登录注册等功能。
图解AUTOSAR-CP-CommunicationStackTypes逻辑图打包
解释程序的逻辑和变量等等
python学习一些项目和资源