1

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

我有一个具有 3 个编辑框的 GUI,用户可以使用此代码设置参数(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);

使用以下代码从 GUI 按钮调用 m 文件:

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 = []

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

提前致谢!

4

2 回答 2

2

在自动生成的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在命令窗口中键入。

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

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

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

于 2013-07-29T20:47:00.087 回答
0

我认为您可以将您的test函数(保存在“test.m”中)定义为:

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

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

sum = test(Variavel_1, Variavel_2);

诚然,我并不精通 MATLAB 中的 GUI 编程,因此可能有一些非常明显的原因您不能这样做,但这避免了使用全局变量,这通常会使代码更简洁。

于 2013-07-29T21:12:24.977 回答