在两个(app disigner)应用之间共享信息

时间:2017-11-12 06:23:48

标签: matlab matlab-app-designer

任何人都可以告诉我如何让我的主应用程序打开一个辅助应用程序,它将捕获一些值,然后将它们发送回我的主应用程序?

我知道app designer documentation已解决此问题,但我无法成功实施这些步骤。此外,我试图运行该示例,但Matlab说该文件不存在。如果有人可以请分享这个例子,它也会非常有帮助。

2 个答案:

答案 0 :(得分:1)

我从未尝试过自己实现这个目标,但是如果面对复杂的应用程序架构,我经常会自行解决这个问题。

实际上,如果您在同一个脚本/函数中实例化两个GUI,或者如果您有一个GUI在其中一个函数内创建另一个GUI,则最简单的方法是SELECT Clients.Name, Clients.Surname FROM Clients INNER JOIN Tickets ON Tickets.ID_Client = Tickets.ID_Client WHERE Tickets.ID_Client = (SELECT ID_Client FROM Tickets GROUP BY ID_Client ORDER BY Count(*) DESC Limit 1) Limit 1 。例如,第一个GUI可以将在其函数中定义的函数句柄传递给目标GUI的构造函数,这样,目标GUI可以调用它,以便在必要时修改第一个GUI的数据和/或属性。

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

G2

答案 1 :(得分:0)

MATLAB的App Designer生成基于类的GUI而不是GUIDE基于函数的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 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