Нарушение доступа с помощью wxPythons CallLater - PullRequest
0 голосов
/ 06 марта 2011

Я пытаюсь преобразовать часть своего кода из 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) , если это помогает.

Edit:

Я попробовал это в IDLE, и это, похоже, сработало. Однако в PyScripter не повезло.

1 Ответ

1 голос
/ 06 марта 2011

что вы можете сделать:

(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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...