Matlab:如何将变量从 GUI 中的编辑文本框传递到另一个 m 文件?

问题描述 投票:0回答:1

我正在使用 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'))

任何建议都会很棒!

预先感谢您的帮助。

user-interface matlab-guide matlab
1个回答
0
投票

我认为如果你想在按下按钮时操作外部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
)
4.我的函数对外部文件进行计算。 (make_value_double.m)
5. 将计算值赋给nu1,并打印到静态文本框。(handles.text1)

------------------------------------------------- -----------------
或者使用保存和加载功能怎么样?
将“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';
© www.soinside.com 2019 - 2024. All rights reserved.