在GUI中设置的全局变量没有值 - Matlab



我创建了一个GUI来设置参数,并在另一个m文件中使用这些参数。我知道在 GUI 中创建的变量与输入变量到 m 文件位于不同的工作区中。出于这个原因,我正在尝试使用 global variables ,但不是很成功:变量进入 m-File 为空。

我有一个 GUI,它有 3 个编辑框,用户可以使用以下代码设置参数(0 或 1((仅显示一个编辑框的代码(:

function density_Callback(hObject, eventdata, handles)
% hObject    handle to density (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 density as text
%        str2double(get(hObject,'String')) returns contents of density as a double
global density
density = str2double(get(hObject, 'String'));
global Variavel_1
assignin('base', 'Variavel_1', density);

m-File从GUI按钮调用,使用以下代码:

function calculate_Callback(hObject, eventdata, handles)
% hObject    handle to calculate (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
test %m-File that uses variables set in GUI

m-File 应该使用此Variavel_1以及此代码 (test.m( 中其余编辑框中的其他文件:

global Variavel_1
global Variavel_2
global sum    
Variavel_1
Variavel_2
sum = Variavel_1 + Variavel_2

但我所拥有的只是所有这些变量都是空的!(我知道我可以把这段代码放在 GUI 代码中,但这不是真正的优点,因为这个简单的 m-File 求和会复杂得多,所以我需要变量去 m-File(。

Variavel_1 = []
Variavel_2 = []
Sum = []

谁能理解为什么全局变量失败?

提前感谢!

在自动生成的回调OpeningFcn中,如果您使用的是 GUIDE您可以在结构handle定义变量/字段。

这是初始化部分。它使用的数据可以在 GUI 上的所有小部件之间共享。

所以,在这个回调中,对于variable_1variable_2sum等,你可以有如下的东西:

handles.variable_1 = 1;
handles.variable_1 = 2;
handles.sum = handles.variable_1 + handles.variable_1 = 1;
% At end update handles structure
handles.output = hObject;
guidata(hObject, handles);

在其他回调中,说出您的ButtonEdit回调

您可以像下面这样正常更新这些值

handles.variable_1 = 12;
handles.variable_1 = 23;
handles.sum = handles.variable_1 + handles.variable_1 = 1;
% Now, at end of callback save the change you made to the structure
guidata(hObject,handles)

若要验证这些值,请在命令窗口中键入handles

参考 :存储或检索 GUI 数据以获取更多详细信息。

要在 GUI 到其他脚本使用这些变量,只需在工作区中分配它们就像assignin('base','variable_1',handles.variable_1);,等在任何更新variable_1回调中。

然后,在 m 脚本中,您可以直接使用这些变量。

我认为您可以将test函数(保存在"test.m"(定义为:

function sum = test(x, y)
sum = x + y;

然后使用以下方法从calculate_CallBack函数调用test函数:

sum = test(Variavel_1, Variavel_2);

诚然,我并不精通 MATLAB 中的 GUI 编程,因此可能有一些非常明显的原因您无法执行此操作,但这避免了使用全局变量,这通常会使代码更干净。

相关内容

  • 没有找到相关文章

最新更新