【问题标题】: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 GUIone 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。实际上,这意味着编写一个控制器对象,将消息传递到所需的字段。

      【讨论】:

        猜你喜欢
        • 2013-03-27
        • 1970-01-01
        • 2015-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-10
        • 1970-01-01
        相关资源
        最近更新 更多