Повторные вызовы ArcMap Python Add-In с wxPython завершаются неудачно после одного успешного вызова
Я написал Python-надстройку для ArcGIS, программу ArcMap, которая использует пакет wxPython для создания окна wx.Frame с несколькими элементами управления, включая кнопку "Выход", закрывающую окно.
Надстройка работает, как и предполагалось, при первом запуске, и я могу закрыть окно wx.Frame, используя кнопку без каких-либо ошибок. Однако после нескольких раз запуска надстройки я получаю фатальную ошибку при повторном запуске надстройки. (Иногда происходит сбой во второй раз, когда я запускаю его. Иногда я могу запустить его несколько раз, прежде чем он выйдет из строя.) Окно ошибок запрашивает отправку отчета в ESRI, но, к сожалению, единственный вывод, который ArcMap генерирует в этом случае, - это.DMP файл, который я предполагаю, просто дамп памяти. Я не знаю, как это интерпретировать.
Скрипт Python, заключенный в надстройку, прекрасно работает из командной строки Python в ArcMap (с соответствующими изменениями), но запуск его из кнопки на пользовательской панели инструментов ArcMap более удобен.
Есть ли способ генерировать след того, что именно происходило, когда он сталкивался с фатальной ошибкой? Нет сообщения об ошибке, отправляемого в окно командной строки Python при сбое.
1 ответ
Я смог найти ответ на эту проблему по ссылке в сообщении на форуме сообщества ESRI GeoNet:
https://community.esri.com/thread/99532
(Вы должны войти в бесплатную учетную запись на форуме, чтобы прочитать сообщения.) Первоначальная ссылка была на презентацию Марка Седерхольма на саммите разработчиков ESRI 2010. Ссылка в сообщении на форуме устарела, но я нашел другую ссылку на Это:
https://www.esri.com/videos/watch?videoid=1229&isLegacy=true
это сработало. В презентации показано, как создать расширение ArcMap, которое содержит панель инструментов и кнопку, которая загружается при запуске ArcMap. Вместо того чтобы использовать wx.Close() или wx.Destroy для закрытия окон, он просто скрывает их с помощью wx.Show(False). Этот подход позволяет использовать графические интерфейсы wxPython в диалоговых окнах, которые можно многократно открывать, закрывать и открывать без сбоя ArcMap.
Я подумал, что это будет полезно для других людей, использующих Python для создания надстроек для ArcMap, использующих wxPython. Далее я буду конвертировать другую надстройку ArcMap, которую я сейчас использую, написанную в VB.NET в Visual Studio, в Python, используя wxPython для построения интерфейса GUI.