Add-In插件和GUI界面崩溃问题的方案

Add-In插件和GUI界面崩溃问题

总结:ArcMap对python的内嵌GUI一直都有很大的问题而且没有修复。主要原因是会和ArcMap自带的python进程冲突或者ArcMap的ui界面线程冲突。如果一定要将GUI内嵌进去,可以尝试子进程调用python GUI

方案:

  1. 将GUI打包成.exe ,点击工具条中的按钮就调用该.exe
    • tkiner GUI
      用py2exe打包成window窗口,不崩溃,但依旧会出现控制台cmd,关闭cmd后可正常使用
    • pyqt GUI
      用pyinstall打包成window窗口,不崩溃,但依旧会出现控制台cmd,关闭cmd后可正常使用
    • 上述方法可能会出现黑框(控制台窗口),解决方案如下:
      https://www.jb51.net/article/50513.htm
  2. 使用wxPython来创建GUI,用PySimpleApp 类来实例化窗口对象(学习成本、可能还不一定有用)

一、pyqt和ArcMap崩溃问题

https://community.esri.com/t5/python-questions/how-to-link-gui-developed-by-using-pyqt-with/m-p/363801

这篇文章提出 怎样在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

https://community.esri.com/t5/python-questions/re-initializing-wxpython-gui-without-crashing/m-p/746891

这篇文章提到了怎么解决wxPython开发的GUI用在ArcMap上崩溃的问题

解决方法是: 使用PySimpleApp 类来实例化窗口对象,它与其他处理事件比如鼠标移动/按钮单击/等的代码(就像 ArcMap.exe 的其余控件一样)可以很好地配合

三、tkiner和ArcMap

https://gis.stackexchange.com/questions/342073/tkfiledialog-askopenfilename-in-python-addin-crashes-arcmap-how-to-avoid-it

这篇文章提到了怎么解决Tkiner开发的GUI在ArcMap崩溃的问题

解决方法是:如果没有在 ArcMap 中打开 Python 窗口,则带有 Python GUI 的插件可以工作

具体原因:要集成 Tkinter GUI,Esri 必须将其消息循环与主应用程序 (ArcMap) 消息循环同步。ArcMap 中有 2 段代码分别做得很好,但问题是地理处理 Python 窗口实现中的一段代码只是覆盖了另一段代码已设置的数据结构(内存)(很可能vtable 指针被破坏)。

根据我的经验,当尝试从 Python 插件启动自定义 GUI 时,ArcMap 与 Tkinter 的配合不佳。在 10.2 中尝试时,ArcMap 立即崩溃,甚至没有错误窗口。但是,我发现如果您通过单独的 Python 文件通过使用子进程调用它来启动您的 GUI模块,ArcMap 中的自定义 Python GUI 效果很好!如果您的 GUI 接收传递回主要 Python AddIn 文件所需的参数,您可以通过子进程 stdout 将其作为文本传递回。

四、wxPython/tkiner和ArcMap

https://gis.stackexchange.com/questions/41821/conflicts-using-tkinter-wxpython-with-python-addin-scripting?noredirect=1

ArcGIS for Desktop 不支持任何开箱即用的 Python GUI,但假设我们无论如何都希望弹出一个表单

一种方法是在启动时创建一个 wx python 实例,该实例是在创建桌面 python 循环之前创建的。然后,您将引用 wx 循环而不是 ArcGIS python 循环。但它很复杂

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Add-in Express是一个用于开发Microsoft Office和Microsoft .NET应用程序的工具。它提供了一个简单易用的平台,使开发人员能够快速构建自定义的Office件和扩展。 使用Add-in Express,开发人员可以利用Visual Studio IDE来创建自定义的Ribbon菜单、工具栏、任务窗格和自定义对话框等Office扩展。它提供了丰富的设计时集成,让开发人员能够轻松地在设计阶段实现快速调试和测试。 Add-in Express支持多种Office应用程序,包括Word、Excel、Outlook、PowerPoint和Visio。它还支持连接到外部数据库和Web服务,以实现更强大的功能。 使用Add-in Express,开发人员不需要深入了解Office的内部结构和编程模型,也不需要编写大量的代码。它提供了一系列的可视化设计工具和代码生成器,可以自动生成所需的代码。开发人员只需要专注于业务逻辑的实现,而不必担心底层的技术细节。 Add-in Express还提供了丰富的文档和示例代码,帮助开发人员快速上手和解决问题。它还有强大的社区支持,开发人员可以在官方论坛上与其他开发人员交流经验和解决方案。 总结来说,Add-in Express是一个功能强大且易于使用的工具,可帮助开发人员快速构建自定义的Office件和扩展。无论是初学者还是有经验的开发人员,都可以从中受益。它可以大大提高开发效率,节省时间和精力。所以,如果你需要开发自定义的Office件,Add-in Express是一个值得考虑的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值