我正在尝试在包装中放入一些.fig及其对应的.m文件。

我有:

 +ui/mainWindow.fig
 +ui/mainWindow.m

但是,当我尝试运行mainWindow.fig时,Matlab从GUIDE打印错误:
  Error using feval
  Undefined function or variable mainWindow

有趣的是,如果我使用其完全限定的名称进行调用:
 ui.mainWindow

该窗口将正常显示(但所有回调均无法正常工作)。

在运行它之前,我尝试过import ui.*

请注意,我想这样做是namespace。我不想将我的整个应用程序放在Matlab的全局范围内。

最佳答案

说明

根本的问题是MATLAB GUIDE不知道软件包。通常,它会自动管理回调名称,使.m和.fig文件保持同步,并且每个人都很高兴。当图形位于包中时,它将无法正确更新.fig属性中的回调-这些回调仍指向非限定名称mainWindow而不是正确的ui.mainWindow。随后,所有回调均失败。

解决方法

解决这一问题的两种方法:

  • 导出图形:Guide -> File -> Export。将此文件放在您的+ ui文件夹中。打开文件,并执行查找替换,将@(hObject,eventdata)mainWindow的所有实例替换为@(hObject,eventdata)ui.mainWindow。
  • 或者,您可以直接在GUIDE本身中手动更新引用,而无需导出。对于每个按钮和元素,Right Click -> Property Inspector然后编辑“回调”字段,用ui.mainWindow替换mainWindow。

  • 就个人而言,我更喜欢第一个解决方案,因为您可以用单个find-replace命令替换所有出现的事件。

    关于Matlab gui文件放在一个包中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13824909/

    10-13 09:15