Использование wx.callLater в wxPython

#python #date #loops #time #wxpython

#python #Дата #циклы #время #wxpython

Вопрос:

Я пытаюсь создать объект, который обрабатывает базовые функции, связанные со временем. Я хочу, чтобы это было так, когда какой-либо из атрибутов (например, self.Указаны ссылки на время, они обновлены. Однако по какой-то причине wx.callLater(1000, self.Отметьте галочкой), похоже, не обновляет атрибуты. Он будет печатать только self.Один раз, а не каждую секунду (как я хочу).

Как бы мне добиться желаемого поведения? Должен ли я использовать что-то помимо wx.callLater (1000, self.Отметьте галочкой)?

Фрагмент :

 import wx, re, time, win32api, calendar

class TimeDate :

    def __init__ (self) :

        self.Tick()

    def Tick (self) :

        self.Year     = int(time.strftime("%Y"))
        self.Month    = int(time.strftime("%m"))
        self.Calendar = calendar.month(self.Year, self.Month)
        self.Date     = time.strftime('%A, %B %d, %Y')
        self.Time     = time.strftime('%I:%M %S %p')

        print self.Time

        wx.CallLater(1000, self.Tick)
  

Комментарии:

1. Возможно, ваша ошибка где-то в другом месте. Можете ли вы опубликовать полный (но минимальный) пример, демонстрирующий проблему, с которой вы столкнулись? Нам нужно увидеть больше кода.

2. Вы создаете экземпляр TimeDate ? Вы должны.

Ответ №1:

Вам нужен wx.Timer, а не wx.CallAfter или wx.callLater. Смотрите следующий учебник по таймерам для получения дополнительной информации:

http://www.blog.pythonlibrary.org/2009/08/25/wxpython-using-wx-timers/

Оба этих метода «Call *» запускаются только один раз.

Ответ №2:

Использовать wx.CallAfter вместо — wx.CallLater это класс, и его следует использовать по-другому.

wx.CallAfter с другой стороны, кажется, это именно то, что вам нужно.

Ответ №3:

Я думаю, что оба wx.CallAfter и wx.CallLater вызываются только один раз…..