[编程心得]PyQt中“明天”的表示法
话说学苑有童鞋抱怨,说一直在看舍得的博客,希望舍得能多介绍一些SuperMemo和Tell Me More方面的使用技巧。这个要求估计比较难满足。倒不是因为SuperMemo和Tell Me More方面已经没什么好写——这绝对不是事实,只要将SuperMemo官网上的文章翻译翻译,再适度延伸一下,一篇文章就出来了,但舍得不想为了交任务而写东西。博客嘛!写下自己最想写的内容才是最佳的选择。这不,现在写上了编程方面的内容。
Qt用的人不少,不过PyQt的就略微少一些。但没关系,舍得用惯了就好。在这里所写的一些东西,都是舍得在实际编程的过程中用到的。之前舍得在学苑里有讲到,舍得向来是走实战流,更准确地讲是“改装流”。舍得从来不去探究代码背后的种种原理,而往往是“我知道这段代码干什么用的”、“这里放这样的代码应该能解决问题”。由于非科班出身,代码难免写得难看点,执行效率多少会低一些,好在舍得的满足点比较低,只要“能用”就行了,这一点倒与不求上进的腾讯有些相似。
下面介绍的是在PyQt中“明天”的表示法,这是最近写的一个HR程序中用到的,先来看看今天怎么表示,比如说我们有一个DateEdit控件,叫做beginDayDateEdit,要给它赋上“今天”这个值就可以这样写:
beginDayDateEdit.setDate(QtCore.QDate.currentDate())
那明天呢?咋办办?
舍得看了看PyQt官方的说明文档,从中找到了一个方法,就是将currentDate先用toJulianDay转成数值形式,然后加1,再用fromJulianDay转回来就可以了,具体的代码如下:
tomorrow = QtCore.QDate.currentDate().toJulianDay() + 1
beginDayDateEdit.setDate(QtCore.QDate.fromJulianDay(tomorrow))
后天、大后天就可以依此类推,不再赘述。
不过在处理DateTimeEdit的控件会有所差异,此时用的不是toJulianDay和fromJulianDay,而是toTime_t和fromTime_t,我们来看看:
tomorrow = QtCore.QDateTime.currentDateTime().toTime_t() + 86400
self.beginDayDateEdit.setDateTime(QtCore.QDateTime.fromTime_t(tomorrow))
注意,由于控件改变了,setDate也变成了setDateTime,toTime_t把当前时间转成了从1970年1月1日00:00:00到现在的总秒数,要加1天的话,加上86400秒就行了。