xsmile
You can fly higher
xsmile's Blog
iTip开发笔记五
http://www.xsmile.net/image/screenshot3-300x113.jpg

iTip的基本功能终于开发完成了!纪念一下~~~~

提醒功能的开发让我足足停滞了一天。首先对于iTip的提醒,肯定要用到wx.Timer控件,而且要不只用到一个,那如何动态创建多个变量呢?VB里面有个变量数组的概念,那Python下如何实现?逛了一下ChinaUinx的论坛,找到了一个帖子,里面的技巧帮我解决了这个问题,那就是建立字典,看下面这个演示:

self.timer={}
for i in something:
    self.timer[i]=wx.Timer(self)

这样一来,就方便的动态初始化了变量,在代码中也能很方便的使用self.timer[i]对变量进行调用了。

这个问题解决了,下面就是提醒功能的具体实现了。我的设想是这样的,将wx.Timer和提醒处理函数alarm绑定,然后传递给alarm一个iTip消息实例用来在alarm函数中处理显示,代码如下:

    def iTipAlarmSet(self,iTip):
        self.timer[iTip.id]=wx.Timer(self)
        self.Bind(wx.EVT_TIMER, self.iTipAlarmShow(iTipinfo=iTip),self.timer[iTip.id])
        ... ...

其中iTipAlarmShow函数代码如下:

def iTipAlarmShow(self,event,iTipinfo):
        iTipAlarm = AlarmFrame(self, -1,"",)
        iTipAlarm.content.SetValue(iTip.content)
        iTipAlarm.createtime.SetLabel(iTip.createdate.strftime('%Y-%m-%d %H:%M:%S'))
        iTipAlarm.Show()
        iTipWork().save(iTip, iTip.content)

看着这个代码,好像逻辑上是可行的哦~~(我是这么认为的囧)结果崩溃,我发现我没法向alarm函数中传递iTipinfo这个变量!换句话说就是iTipAlarmShow这个函数最多就’self’,’event’这两个参数了。我搜遍互联网就没找到能在事件Handler中添加额外变量的代码…囧

wxPython中可以自定义事件,我大概看了一下,实在是…有点复杂,而且好像也不能解决我的问题。只能换思路进行设计了。

最终解决的方法是,为所有需要提醒的iTip消息建立一个list,然后按照提醒时间从小到大排列。创建的多个wx.Timer的触发顺序是按照剩余时间来的,和list是一一对应的,也就是在alarm函数中按顺序显示list中的内容就行了。哎~实在是个比较笨的方法囧

==================================
PS:通过后来的深入学习才知道,对于以上这个问题有更好的解决方案,那就是自定义提醒函数,继承wx.Timer。并覆写Notify(self)方法即可!

class AlarmTimer(wx.Timer):
    def __init__(self, ...):
        wx.Timer.__init__(self)
        """initialization"""
        ... ...

    def Notify(self):
        """Your Logic code here"""
       ... ...

这样一来,可直接使用以下方法进行调用:

self.timer=AlarmTimer(something)
self.timer.Start(1000)

在定时器到时之后,将会执行Notify中的方法。
===================================

说到list的排序,我记录一下如何根据实例的属性进行排序,给出下面的演示代码:

setAlarm=[]
setAlarm.append(iTip)
setAlarm.sort(lambda x,y: cmp(x.alarm, y.alarm))

iTip是个自定义类,它有个datetime类型的属性叫alarm。上面的代码就根据这个alarm属性对iTip类进行了从小到大的排序。

————————————————————————————-
我想Python下的学习就可以告一个段落了,从这个小项目的开发过程中,我学习到了很多东西,虽然更多的只是皮毛。如果能有人从我的笔记中受益,那就是我额外的收获了。

首页      技术      Python      iTip开发笔记五

发表回复

textsms
account_circle
email

xsmile's Blog

iTip开发笔记五
iTip的基本功能终于开发完成了!纪念一下~~~~ 提醒功能的开发让我足足停滞了一天。首先对于iTip的提醒,肯定要用到wx.Timer控件,而且要不只用到一个,那如何动态创建多个变量呢?VB里面…
扫描二维码继续阅读
2008-11-18