2011-03-06 36 views
0

我试图将我的一些代码从Tkinter转换为wxPython。目前我正在尝试创建一个不断循环的函数,并更新时间。但是,我遇到了一些问题。每当我关闭程序时,弹出一个窗口,并给我下面的警告。访问冲突与wxPythons CallLater

Access violation at address 1E058497 in module 'python26.dll'. Read of address 00000008. 

这进而导致我的IDE(PyScripter)冻结和崩溃。我认为它可能试图在程序被销毁后调用该函数。这会导致它访问内存中不可用的位置,导致各种各样的乐趣。任何帮助,将不胜感激。

段:

def tick (self): 
    ''' Continually updates the time. ''' 

    TimeStr = '%I:%M %S %p' 
    DateStr = '%A, %B %d, %Y' 

    Time = time.strftime(TimeStr) 
    Date = time.strftime(DateStr) 

    self.TimeDate = Time + '\t\t' + Date 

    self.ST.SetLabel(self.TimeDate) 

    wx.CallLater(1000, self.tick) 

在Tkinter的版本wx.CallLater(1000,self.tick)。经过(1000,self.tick)取代的,如果没有什么帮助。

编辑:

我试图在空闲和它似乎工作。然而,在PyScripter中没有运气。

+0

你叫这个打勾方法?当MainLoop退出时,您是否终止循环调用? – kakarukeys 2011-03-06 09:19:01

回答

1

你可以做的是:

(1) self.scheduled_call = wx.CallLater(1000, self.tick)

程序关闭时,通过,xxx.scheduled_call取消??????() 我忘了的确切名称。方法,请检查wx文档。

,或者如果上述是不可能的

(2)设置在所述实例的布尔变量,其控制呼叫。方案为方案紧密期间运行 时 if self.var: wx.CallLater(1000, self.tick)

var为真,MainLoop语句()之前设置xxx.var为False