【问题标题】:Pass data between gui's matlab在 gui 的 matlab 之间传递数据
【发布时间】:2014-03-20 06:55:34
【问题描述】:
我有两个 gui,一个是主 gui,另一个是子 gui。在主 gui 的打开功能中,我使用了 open('subgui.fig');打开子 gui。主要由5个编辑框和一个按钮组成。按下按钮后,这 5 个编辑框中的数据应传递给子 gui,主 gui 应关闭。请任何人帮助我做到这一点。
【问题讨论】:
标签:
matlab
user-interface
matlab-guide
data-exchange
【解决方案1】:
让我们以one editbox and one pusbutton in main GUI 和one editbox in sub GUI 为例,它们将从主GUI 的编辑框中获取值。可以根据需要轻松地将其扩展到尽可能多的编辑框。数据存储和检索的基本媒介是全局结构data1。
为了理解代码,让我们做以下假设-
- 主 GUI 被命名为
main_gui.m,因此有一个关联的
main_gui.fig 来自指南。主 GUI 的图形有标签 main_gui_figure。
- 子 GUI 被命名为
sub_gui.m,因此有一个关联的sub_gui.fig
来自指南。
要在 main_gui.m 中进行的编辑
在编辑框的回调中,添加这个 -
global data1;
%%// Field in data1 to store the string in editbox from main GUI
data1.main_gui.edit1val = get(hObject,'String');
在按钮的回调中,在它返回之前添加它 -
global data1;
sub_gui;
delete(handles.main_gui_figure);
要在 sub_gui.m 中进行的编辑
在 sub_gui_OpeningFcn 里面,添加这个 -
global data1;
set(handles.edit1,'String',data1.main_gui.edit1val);%%// Tag of editbox in sub-gui is edit1
希望这对你有用!让我们知道!
【解决方案2】:
实现这一目标的方法可能不止一种。但其中一种方法是定义一个接受两个输入参数的函数:1) 目标图形的句柄和 2) 源图形的任何数据。
以下伪代码不一定在 MATLAB 中运行,但给出了基本思路:
function takeAction(uihdls, data)
set(0, 'CurrentFigure', uihdls.fig); % uihdls.fig is the handle of the destination figure.
set(gcf, 'CurrentAxes', uihdls.aexs1); % axes1 is inside fig
plot(data.x, data.y); % Do some plotting
set(uihdls.editBox, 'String', data.string); % Modify some property of a control inside fig.
key_Callback(uihdls.fig, data.keyData); % Call a callback function of the destination figure
return
源图窗随时可以调用此函数。
【解决方案3】:
多做一些工作 - 但我认为这是值得的。
我通常为此使用MVC pattern。实际上,这意味着编写一个控制器对象,将消息传递到所需的字段。