我创建了一个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_1
、variable_2
、sum
等,你可以有如下的东西:
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);
在其他回调中,说出您的Button
或Edit
回调
您可以像下面这样正常更新这些值
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 编程,因此可能有一些非常明显的原因您无法执行此操作,但这避免了使用全局变量,这通常会使代码更干净。