1

在阅读“wxPython in Action”时,我尝试了书中的代码,一个简化的部分,如下:

import wx 
import time

class Frame(wx.Frame):  
    def __init__(self, *args, **kwargs):  
        wx.Frame.__init__(self, *args, **kwargs)  
        timer = wx.Timer(self,-1)  
        self.Bind(wx.EVT_TIMER, self.OnTimer,timer)   
        timer.Start(1000, True)  
        self.Show()  
    def OnTimer(self, evt):  
        print time.time(), evt   

app = wx.App(False) 
frm = Frame(None, -1)  
app.MainLoop()

当我运行它时,python 没有给出任何错误,但它也没有打印任何东西。
奇怪,有人知道为什么吗?

4

2 回答 2

4

不起作用的原因是因为计时器在 init 方法结束时超出范围并且没有真正运行的机会。正如 GP89 ​​已经指出的那样,您只需将其更改为“self.timer”就可以了。我也有教程,你可以看看。

于 2012-06-07T13:25:12.290 回答
1

Change timer to self.timer and it will work.

I'd be interested to know the reason why it doesn't work as a local variable

I'd guess at something to do with garbage collection though

于 2012-06-07T09:13:25.280 回答