События wxPython размещены в порядке?

Если несколько событий публикуются с использованием wxPostEvent / wxCallAfter из одного и того же потока, например, при нажатии кнопки, они должны обрабатываться в том же порядке?

В приведенном ниже примере wx.Callafter используется для публикации событий, которые в конечном итоге будут вызывать функции обратного вызова, будут ли они вызываться в том же порядке, в котором они были переданы в wx.CallAfter

def onbutton(self, event):
    wx.CallAfter(func1)
    # some more code
    wx.CallAfter(func2)
27.10.2009 07:53:37
2 ОТВЕТА
РЕШЕНИЕ

CallAfter отправляет события в очередь событий, и они должны обрабатываться по порядку. Тем не менее, они обрабатываются на событиях бездействия, а не на основе завершения функции, поэтому func2, который нужно обработать до выполнения func1, зависит от времени событий бездействия (например, wx.Yield и т. Д.). Существует обсуждение этой проблемы. здесь , и кажется, что это может быть довольно сложно.

1
28.10.2009 05:59:26
Я также отправил тот же вопрос в список рассылки wxpython, у Робина есть хороший ответ groups.google.com/group/wxpython-users/browse_thread/thread/…
Anurag Uniyal 28.10.2009 09:00:10
Да, Робин хороший ответ. Тем не менее, стоит посмотреть на эту часть потока, на которую я ссылался: aspn.activestate.com/ASPN/Mail/Message/wxpython-users/3483407 . Здесь это не просто очевидное утверждение Yield или менее очевидное диалоговое окно модели, но и событие рисования, потому что оно находится в очереди не по порядку.
tom10 28.10.2009 14:46:58

Я считаю, что это должно быть гарантировано. У меня есть некоторый код, который захватывает данные из последовательного порта в потоке и запускает события для обработки wx. Даже при получении данных со скоростью 115 кбит / с, где, несомненно, произойдет запуск нескольких событий перед их обработкой, - данные отображаются в порядке, когда wx вызывает мой обработчик для печати / выхода из системы.

0
27.10.2009 21:46:33