我正在尝试将我的一些代码从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中没有运气。
答案 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