2011-03-06 54 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