9

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

我有:

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

但是当我尝试运行mainWindow.figMatlab 时,会从 GUIDE 打印一个错误:

  Error using feval
  Undefined function or variable mainWindow

有趣的是,如果我用它的完全限定名称调用:

 ui.mainWindow

窗口正常显示(但所有回调都不起作用)。

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

请注意,我想以namespace. 我不想让我的整个应用程序在 Matlab 的全球范围内。

4

1 回答 1

5

解释

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

解决方法

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

  • 导出你的图:Guide -> File -> Export. 将此文件放在您的+ui文件夹中。打开文件,然后用@(hObject,eventdata)ui.mainWindow替换@(hObject,eventdata)mainWindow的所有实例。

  • 或者,您可以直接在GUIDE本身内手动更新引用,而无需导出。对于每个按钮和元素,Right Click -> Property Inspector然后编辑“回调”字段,将mainWindow替换为ui.mainWindow

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

于 2012-12-15T02:28:30.100 回答