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