Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 在两个(应用程序设计)应用程序之间共享信息_Matlab_Matlab App Designer - Fatal编程技术网

Matlab 在两个(应用程序设计)应用程序之间共享信息

Matlab 在两个(应用程序设计)应用程序之间共享信息,matlab,matlab-app-designer,Matlab,Matlab App Designer,有谁能告诉我如何让我的主应用程序打开一个辅助应用程序,它将捕获一些值,然后将它们发送回我的主应用程序 我知道这个问题已经解决了,但我一直无法成功地实施这些步骤。另外,我试着运行这个例子,但是Matlab说这个文件不存在。如果有人能分享一下这个例子,那也会很有帮助。我从来没有尝试过自己来实现这个,但我经常想,如果面对一个复杂的应用程序体系结构,我如何才能做到这一点 实际上,如果在同一个脚本/函数中实例化两个GUI,或者如果一个GUI在其一个函数中创建另一个GUI,最简单的方法是使用函数句柄。例如,

有谁能告诉我如何让我的主应用程序打开一个辅助应用程序,它将捕获一些值,然后将它们发送回我的主应用程序


我知道这个问题已经解决了,但我一直无法成功地实施这些步骤。另外,我试着运行这个例子,但是Matlab说这个文件不存在。如果有人能分享一下这个例子,那也会很有帮助。

我从来没有尝试过自己来实现这个,但我经常想,如果面对一个复杂的应用程序体系结构,我如何才能做到这一点

实际上,如果在同一个脚本/函数中实例化两个GUI,或者如果一个GUI在其一个函数中创建另一个GUI,最简单的方法是
使用函数句柄。例如,第一个GUI可以将其函数中定义的函数句柄传递给目标GUI的构造函数,这样,目标GUI可以调用该句柄,以便在必要时修改第一个GUI的数据和/或属性

无论如何,被视为最佳实践的标准方法如下所示。让我们假设您有两个名为
G1
G2
的GUI,并且它们是不同的(您没有运行同一GUI的两个实例)。如果它们都是可见的(
handleviability
设置为
on
),并且它们都定义了
标记
标识符(
G1
G2
),您可以在Matlab“工作区”中搜索它们。因此:


MATLAB的应用程序设计器生成基于类的GUI,而不是基于向导函数的GUI。这种方法的优点是,我们可以将GUI作为对象传递,而不必对函数返回或按标记搜索对象等事情进行创造性处理

下面是一个简单的编程示例,演示了实现此概念的一种方法。主地物窗口打开一个辅助提示窗口,该窗口提供两个输入。当提示窗口关闭时,主GUI将输入值打印到命令窗口并退出

主窗口:

classdef mainwindow < handle
    properties
        mainfig
        butt
    end

    methods
        function [self] = mainwindow()
            % Build a GUI
            self.mainfig = figure('Name', 'MainWindow', 'Numbertitle', 'off', ...
                                  'MenuBar', 'none', 'ToolBar', 'none');
            self.butt = uicontrol('Parent', self.mainfig, 'Style', 'Pushbutton', ...
                                  'Units', 'Normalized', 'Position', [0.1 0.1 0.8 0.8], ...
                                  'String', 'Push Me', 'Callback', @(h,e) self.buttoncallback);
        end

        function buttoncallback(self)
            tmpwindow = subwindow();  % Open popupwindow
            uiwait(tmpwindow.mainfig);  % Wait for popup window to be closed
            fprintf('Parameter 1: %u\nParameter 2: %u\n', tmpwindow.parameter1, tmpwindow.parameter2);

            close(self.mainfig);
        end
    end
end
classdef主窗口
子窗口:

classdef subwindow < handle
    properties
        mainfig
        label1
        box1
        label2
        box2
        closebutton

        parameter1
        parameter2
    end

    methods
        function [self] = subwindow()
            % Build a GUI
            self.mainfig = figure('Name', 'SubWindow', 'Numbertitle', 'off', ...
                                  'MenuBar', 'none', 'ToolBar', 'none');
            self.label1 = uicontrol('Parent', self.mainfig, 'Style', 'text', ...
                                    'Units', 'Normalized', 'Position', [0.4 0.7 0.2 0.05], ...
                                    'String', 'Parameter 1');
            self.box1 = uicontrol('Parent', self.mainfig, 'Style', 'edit', ...
                                  'Units', 'Normalized', 'Position', [0.4 0.6 0.2 0.1], ...
                                  'String', '10');
            self.label2 = uicontrol('Parent', self.mainfig, 'Style', 'text', ...
                                    'Units', 'Normalized', 'Position', [0.4 0.4 0.2 0.05], ...
                                    'String', 'Parameter 2');
            self.box2 = uicontrol('Parent', self.mainfig, 'Style', 'edit', ...
                                  'Units', 'Normalized', 'Position', [0.4 0.3 0.2 0.1], ...
                                  'String', '10');
            self.closebutton = uicontrol('Parent', self.mainfig, 'Style', 'Pushbutton', ...
                                         'Units', 'Normalized', 'Position', [0.4 0.1 0.2 0.1], ...
                                         'String', 'Close Window', 'Callback', @(h,e) self.closewindow);
        end

        function closewindow(self)
            % Drop our input parameters into this window's properties
            self.parameter1 = str2double(self.box1.String);
            self.parameter2 = str2double(self.box2.String);

            % Close the window
            close(self.mainfig);
        end
    end
end
classdef子窗口
您好,谢谢您的回复。使用此方案,我试图制作一个简单的应用程序,但当我调用行“fprintf('参数1:%u\n参数2:%u\n',tmpwindow.parameter1,tmpwindow.parameter2);”时,matlab表示句柄已被删除。我在UIwait之前和之后进行了检查,并且确实删除了UIwait。我想这是子窗口中关闭函数的原因,您能想出解决问题的方法或问题的根源吗?由于这个确切的原因,感谢洛蒂将它们存储为对象的属性。如果关闭地物窗口,则无法再寻址uicontrol,但仍可访问对象的其他属性。
classdef subwindow < handle
    properties
        mainfig
        label1
        box1
        label2
        box2
        closebutton

        parameter1
        parameter2
    end

    methods
        function [self] = subwindow()
            % Build a GUI
            self.mainfig = figure('Name', 'SubWindow', 'Numbertitle', 'off', ...
                                  'MenuBar', 'none', 'ToolBar', 'none');
            self.label1 = uicontrol('Parent', self.mainfig, 'Style', 'text', ...
                                    'Units', 'Normalized', 'Position', [0.4 0.7 0.2 0.05], ...
                                    'String', 'Parameter 1');
            self.box1 = uicontrol('Parent', self.mainfig, 'Style', 'edit', ...
                                  'Units', 'Normalized', 'Position', [0.4 0.6 0.2 0.1], ...
                                  'String', '10');
            self.label2 = uicontrol('Parent', self.mainfig, 'Style', 'text', ...
                                    'Units', 'Normalized', 'Position', [0.4 0.4 0.2 0.05], ...
                                    'String', 'Parameter 2');
            self.box2 = uicontrol('Parent', self.mainfig, 'Style', 'edit', ...
                                  'Units', 'Normalized', 'Position', [0.4 0.3 0.2 0.1], ...
                                  'String', '10');
            self.closebutton = uicontrol('Parent', self.mainfig, 'Style', 'Pushbutton', ...
                                         'Units', 'Normalized', 'Position', [0.4 0.1 0.2 0.1], ...
                                         'String', 'Close Window', 'Callback', @(h,e) self.closewindow);
        end

        function closewindow(self)
            % Drop our input parameters into this window's properties
            self.parameter1 = str2double(self.box1.String);
            self.parameter2 = str2double(self.box2.String);

            % Close the window
            close(self.mainfig);
        end
    end
end