matlab:使用 GUI 输入生成函数输出变量
matlab: generating function output variable with GUI input
我维护的一个软件包的功能之一是将用户的shorthand产品名称解析为产品的全名。在返回用户输入之前,该软件会尝试 2 种方式自动执行此操作。如果自动尝试失败,则要求用户匹配 table。
GUI部分相当大,所以它在自己的子功能中维护。子函数只会 return idx
或索引变量。我很难用 matlab "patient" 来等待 GUI 指定 idx。
以下是代码的重要部分和注释:
function [ idx ] = mnmhelper( modeldb )
%mnmhelper makes a UI table for the user to manually select the correct
%model
%% uitable generation
f = figure('UserData',1); %userdata will be the selection;
t = uitable('Parent',f,...
'Data',modeldb.Model,...
'CellSelectionCallback',@select_callback);
b = uicontrol('Parent', f,...
'Style','pushbutton',...
'String','Commit Model Name',...
'Callback',@button_callback);
%% callbacks - note that these are nested in the parent fnc
function select_callback(hObject , eventdata)
%hObject - handle to uitable
%eventdata - currently selected table indexes
f.UserData = eventdata.Indices; % pass selection as userdata array: [row,col]
end
function button_callback(hObject,eventdata,selection)
idx = f.UserData(1);
close(f);
figclosed = 1; %see additional notes below code on this line
end
end
问题是 matlab 会报错说 idx 没有定义,因为它还没有等到图形被使用。
我尝试添加以下部分:
%% strongarm matlab into waiting for user to do this
figclosed = 0;
while figclosed < 1 %don't evaluate to command line until figure is finished
% ... do nothing
% once this evaluates to ==1 and kicks out of this, idx is defined
end
在所有的回调之后,但是matlab会在while循环中等待,图形没有生成。如何让 matlab 等待?
我需要一个 CreateFcn
的 f 让 matlab 等待什么的吗?
uiwait
功能就是为了这个目的而存在的。只需调用 uiwait(f)
让 matlab 等待 GUI 图终止。
参见文档:uiwait。
我维护的一个软件包的功能之一是将用户的shorthand产品名称解析为产品的全名。在返回用户输入之前,该软件会尝试 2 种方式自动执行此操作。如果自动尝试失败,则要求用户匹配 table。
GUI部分相当大,所以它在自己的子功能中维护。子函数只会 return idx
或索引变量。我很难用 matlab "patient" 来等待 GUI 指定 idx。
以下是代码的重要部分和注释:
function [ idx ] = mnmhelper( modeldb )
%mnmhelper makes a UI table for the user to manually select the correct
%model
%% uitable generation
f = figure('UserData',1); %userdata will be the selection;
t = uitable('Parent',f,...
'Data',modeldb.Model,...
'CellSelectionCallback',@select_callback);
b = uicontrol('Parent', f,...
'Style','pushbutton',...
'String','Commit Model Name',...
'Callback',@button_callback);
%% callbacks - note that these are nested in the parent fnc
function select_callback(hObject , eventdata)
%hObject - handle to uitable
%eventdata - currently selected table indexes
f.UserData = eventdata.Indices; % pass selection as userdata array: [row,col]
end
function button_callback(hObject,eventdata,selection)
idx = f.UserData(1);
close(f);
figclosed = 1; %see additional notes below code on this line
end
end
问题是 matlab 会报错说 idx 没有定义,因为它还没有等到图形被使用。
我尝试添加以下部分:
%% strongarm matlab into waiting for user to do this
figclosed = 0;
while figclosed < 1 %don't evaluate to command line until figure is finished
% ... do nothing
% once this evaluates to ==1 and kicks out of this, idx is defined
end
在所有的回调之后,但是matlab会在while循环中等待,图形没有生成。如何让 matlab 等待?
我需要一个 CreateFcn
的 f 让 matlab 等待什么的吗?
uiwait
功能就是为了这个目的而存在的。只需调用 uiwait(f)
让 matlab 等待 GUI 图终止。
参见文档:uiwait。