这一定很容易,但由于某些原因我无法解决这个问题。 我所拥有的是2个GUI,即GUI1和GUI2。
在GUI1中,我按照A
读取并存储了一个图像。它还有一个PushButton。现在,当我单击此按钮时,它应该在GUI2的轴1中显示该图像。
我尝试了setappdata
和getappdata
但最终却给出了错误。我无法理解语法。我是MATLAB的新手。任何帮助表示赞赏。
答案 0 :(得分:1)
setappdata
/ getappdata
将在下面详细讨论。
如评论中所述,您可以使用setappdata(0, ...
/ getappdata(0, ...
向/从根对象分配/读取数据。
摘自MATLAB User Interfaces - Passing Data Around User Interface。原作者是Suever和Hoki。归因详情可在contributor page上找到。该来源在CC BY-SA 3.0下获得许可,可以在Documentation archive中找到。参考主题ID:2883和示例ID:9775。
围绕用户界面传递数据
大多数高级用户界面要求用户能够在构成用户界面的各种功能之间传递信息。 MATLAB有许多不同的方法可以做到这一点。
guidata
MATLAB自己的GUI Development Environment (GUIDE)更喜欢使用名为struct
的{{1}}来在回调之间传递数据。此handles
包含各种UI组件的所有图形句柄以及用户指定的数据。如果您没有使用自动传递struct
的GUIDE创建的回调,则可以使用guidata
handles
如果要修改存储在此数据结构中的值,则可以进行修改,但必须将其存储回% hObject is a graphics handle to any UI component in your GUI
handles = guidata(hObject);
,以便其他回调可以看到更改。您可以通过指定guidata
的第二个输入参数来存储它。
hObject
% Update the value
handles.myValue = 2;
% Save changes
guidata(hObject, handles)
的值只要是同一hObject
中的UI组件就无关紧要,因为最终数据存储在包含的图中figure
。
最适合:
hObject
结构,您可以在其中存储所有内容
GUI组件的句柄。不推荐:
handles
/ setappdata
这些)。setappdata
/ getappdata
与getappdata
方法类似,您可以使用setappdata
和getappdata
来存储和检索图形句柄中的值。使用这些方法的优点是,您只能检索您想要的值而不是包含所有存储数据的整个guidata
。它类似于键/值存储。
将数据存储在图形对象中
struct
并从不同的回调中检索相同的值
% Create some data you would like to store
myvalue = 2
% Store it using the key 'mykey'
setappdata(hObject, 'mykey', myvalue)
注意:如果在调用value = getappdata(hObject, 'mykey');
之前没有存储任何值,则会返回一个空数组(getappdata
)。
与[]
类似,数据存储在包含guidata
的图中。
最适合:
UserData
每个图形句柄都有一个特殊属性hObject
,它可以包含您想要的任何数据。它可以包含一个单元格数组,UserData
,甚至是标量。您可以利用此属性并在此字段中存储您希望与给定图形句柄关联的所有数据。如果您使用R2014b或更新版本,则可以使用标准struct
/ get
方法保存和检索图形对象或点符号。
set
然后在另一个回调中,您可以检索此数据:
% Create some data to store
mydata = {1, 2, 3};
% Store it within the UserData property
set(hObject, 'UserData', mydata)
% Of if you're using R2014b or newer:
% hObject.UserData = mydata;
最适合:
在MATLAB中,嵌套函数可以读取和修改父函数中定义的任何变量。这样,如果将回调指定为嵌套函数,它可以检索和修改主函数中存储的任何数据。
their_data = get(hObject, 'UserData');
% Or if you're using R2014b or newer:
% their_data = hObject.UserData;
最适合:
function mygui()
hButton = uicontrol('String', 'Click Me', 'Callback', @callback);
% Create a counter to keep track of the number of times the button is clicked
nClicks = 0;
% Callback function is nested and can therefore read and modify nClicks
function callback(source, event)
% Increment the number of clicks
nClicks = nClicks + 1;
% Print the number of clicks so far
fprintf('Number of clicks: %d\n', nClicks);
end
end
和/或guidata
方法。不推荐:
中型,大型或复杂的GUI。
使用set/getappdata
创建的GUI。
如果您需要将数据发送到回调函数并且不需要修改回调中的数据,您始终可以考虑使用精心设计的回调定义将数据传递给回调。
您可以使用添加输入的匿名函数
GUIDE
或者您可以使用单元格数组语法指定回调,再次指定其他输入。
% Create some data to send to mycallback
data = [1, 2, 3];
% Pass data as a third input to mycallback
set(hObject, 'Callback', @(source, event)mycallback(source, event, data))
最适合:
set(hObject, 'Callback', {@mycallback, data})
执行某些操作但data
变量不需要修改并保存在新状态时。