Add-In插件和GUI界面崩溃问题
总结:ArcMap对python的内嵌GUI一直都有很大的问题而且没有修复。主要原因是会和ArcMap自带的python进程冲突或者ArcMap的ui界面线程冲突。如果一定要将GUI内嵌进去,可以尝试子进程调用python GUI
方案:
- 将GUI打包成.exe ,点击工具条中的按钮就调用该.exe
- tkiner GUI
用py2exe打包成window窗口,不崩溃,但依旧会出现控制台cmd,关闭cmd后可正常使用 - pyqt GUI
用pyinstall打包成window窗口,不崩溃,但依旧会出现控制台cmd,关闭cmd后可正常使用 - 上述方法可能会出现黑框(控制台窗口),解决方案如下:
https://www.jb51.net/article/50513.htm
- tkiner GUI
- 使用wxPython来创建GUI,用PySimpleApp 类来实例化窗口对象(学习成本、可能还不一定有用)
一、pyqt和ArcMap崩溃问题
这篇文章提出 怎样在ArcMap中链接pyqt开发的GUI界面,有人指出:
I believe that ESRI has not found a way to get GUI interfaces developed in Python to interact compatibly with ArcMap. They both compete for OS attention and identical resources and generate errors or crashes. So I have not heard of a way to make a python GUI part of an ArcMap extension.
即:
ESRI 还没有找到一种方法来让用 Python 开发的 GUI 界面与 ArcMap 兼容。它们都争夺操作系统的注意力和相同的资源,并产生错误或崩溃。所以我还没有听说过让 python GUI 成为 ArcMap 扩展的一部分的方法。
另外他们推荐用ArcTool工具箱来代替GUI,用Add-in插件在必要时候打开工具箱从而替代python GUI的功能
二、wxPython和ArcMap
这篇文章提到了怎么解决wxPython开发的GUI用在ArcMap上崩溃的问题
解决方法是: 使用PySimpleApp 类来实例化窗口对象,它与其他处理事件比如鼠标移动/按钮单击/等的代码(就像 ArcMap.exe 的其余控件一样)可以很好地配合
三、tkiner和ArcMap
这篇文章提到了怎么解决Tkiner开发的GUI在ArcMap崩溃的问题
解决方法是:如果没有在 ArcMap 中打开 Python 窗口,则带有 Python GUI 的插件可以工作
具体原因:要集成 Tkinter GUI,Esri 必须将其消息循环与主应用程序 (ArcMap) 消息循环同步。ArcMap 中有 2 段代码分别做得很好,但问题是地理处理 Python 窗口实现中的一段代码只是覆盖了另一段代码已设置的数据结构(内存)(很可能vtable 指针被破坏)。
四、wxPython/tkiner和ArcMap
ArcGIS for Desktop 不支持任何开箱即用的 Python GUI,但假设我们无论如何都希望弹出一个表单
一种方法是在启动时创建一个 wx python 实例,该实例是在创建桌面 python 循环之前创建的。然后,您将引用 wx 循环而不是 ArcGIS python 循环。但它很复杂