обработка событий в wxpython

В wxpython лучше ли обрабатывать события, создавая отдельную функцию для каждого обработчика событий (скажем, отдельную функцию для каждого нажатия кнопки) или создавать один большой button_handler, а затем определять кнопку, нажатую оттуда?

В принципе, мне интересно, является ли более ресурсоемким наблюдение за множеством различных событий для каждой отдельной вещи или только одно большое событие, которое выясняет, какое из них было выбрано, когда оно было запущено.


person Glen Takahashi    schedule 09.07.2012    source источник


Ответы (3)


Если у меня есть три кнопки, которые делают совершенно разные вещи, тогда мне нужны разные обработчики событий для них, потому что мне легче их отлаживать. Если все они имеют кнопки печати с немного разными параметрами форматирования, я подключу их все к одному обработчику и использую event.GetEventObject (), чтобы выяснить, какой из них вызвал. Несколько раз у меня было несколько событий, обрабатываемых одним и тем же обработчиком, когда у меня была кнопка на панели инструментов и пункт меню, которые вызывали одно и то же. Это больше связано с потоком программы и простотой отладки, и это просто приходит с практикой.

person Mike Driscoll    schedule 09.07.2012

Не беспокойся об этом. Ресурсы, необходимые для любой схемы, будут тривиальными, особенно в сценарии Python. Сосредоточьтесь на разработке кода таким образом, чтобы его было легче понять и поддерживать.

person ravenspoint    schedule 09.07.2012

Интенсивность ресурсов здесь не ваша проблема, но вы определенно захотите использовать для этого один большой цикл событий. Из-за глобальной блокировки интерпретатора многие обработчики событий в python имеют раздражающие способы обработки очереди событий, а в некоторых обработчиках событий может быть даже невозможно проверить событие, не удаляя его из стека (например, VPython) и т. Д. В этих случаях вы вполне можете столкнуться со странными и трудно отслеживаемыми ошибками, если вы используете несколько проверок в своем коде. Если вы воспользуетесь одним большим событием, этого не произойдет или будет намного легче отследить.

Ravenspoint прав в том, что ресурсоемкость любого подхода тривиальна, и, основываясь только на ресурсоемкости, вам не следует беспокоиться об этом, но единый цикл событий значительно проще поддерживать.

person Slater Victoroff    schedule 09.07.2012