MATLAB GUI:交换数据(句柄)

时间:2014-07-18 14:31:54

标签: matlab matlab-guide handles

我已经通过GUIDE设计了一个用于图像分析的MATLAB GUI。我需要在函数之间共享数据,所以我使用了guidata函数并将其存储在handle-object中,因为它已被记录(http://www.mathworks.de/de/help/matlab/ref/guidata.html)。

对于自动生成的回调函数(自动接收句柄),这很有效,但是我还想修改自编函数和自编回调函数中的数据(比如点击图像事件)。我尝试手动传递handle对象,这使我可以读取数据,但无法存储它。我也尝试传递对象句柄,使用guidata(hObject, handles)但是对象句柄不起作用。

简而言之:我需要一种方法来读取和写入文件中所有函数的数据。我正在寻找一种更优雅的方式,而不是让一切都变得全球化。那将是我的最后一招。

你有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在GUI中,您可以使用函数setappdata / getappdata来存储和共享函数之间的数据结构(link to docs)。

您可以将图形用作手柄。例如:

appData = struct;
appData.image = someImage;
appData.title = "someTitle";

setappdata(handles.figure1,'data',appData);

稍后,您将handles传递给您的函数,然后您可以检索您的数据:

function showTitle(handles)
 appData = getappdata(handles.figure1,'data');
 title = appData.title;
 newTitle = "someNewTitle";
 appData.title = newTitle;
 setappdata(handles.figure1,'data',appData);

编辑:刚刚找到了这个link,它指定了在回调中共享数据的多种策略。

答案 1 :(得分:0)

非常感谢你!我在尝试生成可复制的示例时发现了错误。在我的情况下,我在一个函数中使用图像句柄而不是图形句柄,因为它是一个图像点击回调,在该函数内部重新绘制图像,因此句柄不再有效。 我现在使用 gcf 来获取数字句柄,它可以正常工作。