如何将变量传递给通过指南创建的函数

时间:2009-04-01 07:22:30

标签: matlab matlab-guide

我在MATLAB指南中开发了一个GUI。从GUIDE创建的函数可以使用外部函数或类的数据的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

ymihere提供的链接看起来非常有用。此外,在这些链接中讨论的一些选项(嵌套函数和使用GUIDATA)在SO上的另一篇文章中得到解决:How to create a GUI inside a function in MATLAB?这里有几个示例代码查找每个案例

我个人偏爱使用嵌套函数,因为我觉得它在大多数情况下会创建更简洁,更清晰的代码。但是,如果您是较新的MATLAB用户(可能需要一点时间习惯),那么共享应用程序数据的方法可能会更加困难。最简单的选择可能是在您的函数调用中设置“UserData”属性(由ymihere建议)。如果您将GUIDE GUI保存为“myGUI.m”,则可以调用:

>> hGUI = myGUI('UserData','hello');

其中 hGUI 是GUI对象的句柄。然后,您可以获取'UserData'属性以查看它包含字符串'hello':

>> get(hGUI,'UserData')

ans =

hello

而不是'hello',你可以放任何你想要的东西,比如数据结构。您应该能够从GUIDE m文件的回调中访问该图的“UserData”字段。您必须从传递给回调的 handle 参数中获取数字句柄。

编辑:使用'UserData'属性或将数据附加到对象的其他一些方法的一个缺点是数据可能被意外(或故意)覆盖或以其他方式损坏由用户或其他应用程序。使用嵌套函数在GUI回调之间共享数据的好处是它可以使代码与用户或其他应用程序可能执行的任何操作隔离开来。相反,使用global variables可能相当危险。

答案 1 :(得分:2)

我不知道你想要做什么,但你可能想要使用这个数字的UserData属性:

打开myfig表单时传递somevar:

h = myfig('UserData', somevar);

或更晚:

h = myfig();
[...]
set(h, 'UserData', somevar);

在图中,您可以使用以下方式访问该属性:

function some_Callback(hObject, eventdata, handles)
    somevar = get(hObject, 'UserData');

请参阅link textlink text