任何人都可以告诉我如何让我的主应用程序打开一个辅助应用程序,它将捕获一些值,然后将它们发送回我的主应用程序?
我知道app designer documentation已解决此问题,但我无法成功实施这些步骤。此外,我试图运行该示例,但Matlab说该文件不存在。如果有人可以请分享这个例子,它也会非常有帮助。
答案 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 handles
和G1
的GUI,它们是不同的(您没有运行同一GUI的两个实例)。如果它们都可见(G2
设置为HandleVisibility
)并且它们都定义了on
标识符(在我们的示例中为Tag
和G1
),则可以在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