You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Siemens NX Python插件中调用嵌入式Qt的.dll库开发UI?

使用NXOpen Python调用NX内置Qt库开发UI插件的实现方案

作为长期用NXOpen做二次开发的开发者,我非常熟悉你遇到的场景——NX确实依赖定制化的Qt库(也就是你看到的Qt5GuiNX.dllQt5CoreNX.dll这类文件),直接用普通PyQt/PySide会出现版本冲突,而且不符合插件的轻量化安装要求。下面是经过验证的可靠实现步骤:

核心原则:依赖NX自带环境,避免额外打包

NX启动时会自动加载自身的环境变量和库文件,所以我们的插件必须完全依托NX的内置Python解释器和Qt库,不需要单独打包Qt组件,这样能完美满足安装要求。

步骤1:确认开发环境

必须使用NX安装目录下的Python解释器进行开发,路径一般是:

<NX安装路径>\UGII\python\python.exe

比如NX 2306的默认路径是C:\Program Files\Siemens\NX 2306\UGII\python\python.exe。用这个解释器运行脚本,能自动识别NX的Qt库路径,避免手动配置的麻烦。

步骤2:用NXOpen.Qt集成Qt界面

NXOpen提供了专门的Qt加载接口,能直接加载Qt Designer制作的.ui文件,且自动复用NX的Qt库,是最稳妥的方式:

示例代码:

import os
import NXOpen
import NXOpen.Qt

def show_custom_ui():
    # 获取NX会话和UI对象
    the_session = NXOpen.Session.GetSession()
    the_ui = the_session.UI

    # 加载Qt Designer导出的UI文件
    ui_loader = NXOpen.Qt.UiLoader()
    # 替换为你的UI文件路径,建议和脚本同目录
    ui_file_path = os.path.join(os.path.dirname(__file__), "custom_ui.ui")
    
    try:
        widget = ui_loader.LoadUi(ui_file_path)
    except Exception as e:
        the_ui.NXMessageBox.Show("错误", NXOpen.NXMessageBox.DialogType.Error, f"加载UI失败:{str(e)}")
        return

    # 将UI嵌入NX的对话框中显示
    dialog = the_ui.CreateDialog(widget)
    dialog.Show()

# 启动UI
if __name__ == "__main__":
    show_custom_ui()

步骤3:处理自定义逻辑(信号槽)

如果需要给UI控件添加交互逻辑,比如按钮点击事件,可以通过NXOpen.Qt的信号槽机制实现,示例:

# 假设你的UI中有一个名为pushButton的按钮
push_button = widget.findChild(NXOpen.Qt.QPushButton, "pushButton")

def on_button_clicked():
    the_ui.NXMessageBox.Show("提示", NXOpen.NXMessageBox.DialogType.Information, "按钮被点击了!")

# 绑定信号槽
push_button.clicked.connect(on_button_clicked)

步骤4:插件打包与安装

为了满足安装要求,推荐将脚本、UI文件和资源文件打包成NX标准插件包(.nxpk):

  • 创建一个包含所有文件的文件夹,结构示例:
    MyCustomPlugin/
    ├── custom_ui.ui
    ├── main.py
    └── plugin.json  # 插件配置文件,定义插件名称、加载方式等
    
  • 使用NX的Plugin Builder或者手动打包成.nxpk文件(本质是zip压缩包,改后缀为.nxpk)
  • 用户安装时,只需将.nxpk文件放到NX的插件目录(默认是C:\Program Files\Siemens\NX <版本>\UGII\plugins),或者通过NX的File->Options->Plugins界面加载。

关键注意事项

  • 绝对不要使用独立的PyQt5/PySide2库,否则会和NX的定制Qt库发生版本冲突,导致NX崩溃
  • 所有测试必须在NX内部进行(通过File->Execute->Python Script运行),外部Python环境无法正确加载NX的Qt库
  • 不要尝试手动加载Qt5GuiNX.dll这类文件,NXOpen的Qt接口已经封装了所有必要的调用,直接使用即可

内容的提问来源于stack exchange,提问作者Anton

火山引擎 最新活动