使用wxPythons CallLater访问冲突

时间:2011-03-06 03:18:19

标签: python wxpython tkinter

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

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) .after(1000,self.tick)取代,如果有帮助。

修改

我在IDLE尝试了它似乎工作。但是,在PyScripter中没有运气。

1 个答案:

答案 0 :(得分:1)

你能做的是:

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

在程序关闭期间,取消通过,xxx.scheduled_call。??????() 我忘记了方法的确切名称,请查看wx docs。

如果上述情况不可能,则为

(2)在实例中设置一个控制调用的布尔变量。 if self.var: wx.CallLater(1000, self.tick)

当程序运行时,

var为True 在程序关闭期间,将xxx.var设置为False