我正在使用 GUIDE 创建 MATLAB GUI。 GUI 具有单选按钮、弹出菜单、可编辑文本框和按钮。我很喜欢使用单选按钮和弹出菜单。但是,我想从可编辑文本框(用户输入的)中获取值并将其分配给变量
nu
。然后,我想在另一个 m 文件中使用 nu
的值,当用户按下按钮时,我从 GUI 调用该文件,以便进行必要的计算(计算代码位于 m 文件中) ).
当我尝试将
nu
的值从 GUI(用户输入的)传递到 m 文件时,问题就出现了。
可编辑文本框回调的代码如下:
function etxt_freq_Callback(hObject, eventdata, handles)
% hObject handle to etxt_freq (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of etxt_freq as text
% str2double(get(hObject,'String')) returns contents of etxt_freq as a double
% input = str2double(get(hObject,'string'));
% if isnan(input)
% errordlg('You must enter a numeric value between 0 and 1','Invalid Input','modal')
% uicontrol(hObject)
% return
% else
% display(input);
% end
% handles.nu = str2num(get(hObject, 'string'))
% guidata( hObject, handles );
nu = str2num(get(hObject, 'string'))
任何建议都会很棒!
预先感谢您的帮助。
我认为如果你想在按下按钮时操作外部m文件函数,你需要在按钮回调函数中编写代码。
喜欢..
nu = str2num(get(handles.etxt_freq, 'String'));
我认为这可以是一个使用输入参数创建函数的解决方案。
下面是我的例子,它对我有用。
我做了一个如下所示的函数,并将其放在我的 GUI 文件(.fig/.m)的同一目录中
function [ double_nu ] = make_value_double( nu )
% make_value_double function get a value from argument.
% And return a value that two times of nu.
double_nu = nu * 2;
end
以及 GUI 代码
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to send_etxt (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
nu = str2num(get(handles.etxt_freq, 'String'));
nu1 = make_value_double(nu);
set(handles.text1, 'String', nu1);
我制作了静态文本框来检查功能是否有效。
当我按下按钮时,
1. 'pushbutton1' 获取一个 'String' 值并将其转换为数字。
2. 这个号码分配给'nu'。
3.“nu”成为我的函数的参数。 (
make_value_double
)------------------------------------------------- -----------------
或者使用保存和加载功能怎么样?
将“nu”制作为“nu.mat”并在另一个程序中加载“nu.mat”。
在图形用户界面中, 函数pushbutton1_Callback(hObject,事件数据,句柄) % hObject 到 pushbutton1 的句柄(参见 GCBO) % eventdata 保留 - 将在 MATLAB 的未来版本中定义 % 带有句柄和用户数据的句柄结构(参见 GUIDATA)
nu = str2num(get(handles.etxt_freq, 'String'));
% save(filename, variable)
save('nu.mat', 'nu');
在您的 simulink 代码中,输入
load('nu.mat');
命令会将变量“nu”添加到您的 simulink 代码的工作区中。然后使用它。您也可以通过
CloseRequestFcn
来删除“nu.mat”。通过这样做,当您关闭图形/GUI 时,“nu.mat”也会被删除。然后,当 GUI 关闭时,您的 simulink 函数无法使用“nu.mat”。
% --- Executes when user attempts to close figure1.
function figure1_CloseRequestFcn(hObject, eventdata, handles)
% hObject handle to figure1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: delete(hObject) closes the figure
delete(hObject);
% delete 'nu.mat' in your working directory
delete 'nu.mat';