【问题标题】:Matlab: How to pass a variable from an edit text box in a GUI to another m file?Matlab:如何将变量从 GUI 中的编辑文本框传递到另一个 m 文件?
【发布时间】:2015-06-17 12:04:30
【问题描述】:

我正在使用 GUIDE 创建一个 MATLAB GUI。 GUI 具有单选按钮、弹出菜单、可编辑文本框和按钮。我很擅长使用单选按钮和弹出菜单。但是,我想从可编辑文本框中(用户输入)中获取值并将其分配给变量nu。然后,我想在用户按下按钮时从 GUI 调用的另一个 m 文件中使用 nu 的值,以便进行必要的计算(计算代码在 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'))

任何建议都会很棒!

提前感谢您的帮助。

【问题讨论】:

  • 您似乎已经根据 cmets 回答了自己的问题。您可以将其写为答案并将其标记为已接受吗?

标签: user-interface matlab-guide matlab


【解决方案1】:

如果你想在按下按钮时操作外部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, eventdata, 句柄) % hObject 到 pushbutton1 的句柄(见 GCBO) % eventdata reserved - 将在未来版本的 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';

【讨论】:

  • 您好,非常感谢您提供的信息。这似乎对我不起作用。有没有办法可以获取变量 nu 然后在命令窗口中全局分配它?这样这个变量可以被同一目录下的不同文件使用?
  • 你的意思是获取'nu'值和使用'nu'值是不同的程序? (“nu”将在不同的时间和地点使用。)
  • 是的,我需要从 gui 中获取 'nu' 的值,并在按下按钮时使用该值。按下按钮后,我调用了另一个 m 文件。在 m 文件中,我正在运行一个 simulink 模型的仿真。 simulink 模型需要 'nu' 的值来计算传递函数的分子和分母。有什么建议吗?
  • 我使用了保存和加载。它很好地保存了'nu'的值。但是,它无法加载它。 (我在按下按钮后调用的 m 文件中写了 load(nu.mat))
  • 我终于用assignin函数解决了这个问题,并将'nu'的值分配给工作区。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-02
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多