matlab gui - 调用同样的gui屏幕

时间:2014-02-14 12:45:10

标签: matlab user-interface

我正在尝试用matlab做GUI,用户输入点作为输入和连接。

我有5个matlab文件 - screen1.m,screen2.m,screen3.m,screen4.m,globalParams.m

在globalParams我有全局参数,所以我可以使用它们从屏幕GUI到屏幕GUI。 在screen1中,用户输入节点数(例如5)。当他按下Next按钮时,回调函数会调用“screen2();”。在screen2.m中,用户输入(x,y)coordiante,当他按下Next按钮时,回调函数调用“screen3();”。

现在我要求他填写Node i和Node j之间的连接(他需要填写节点i和j的数字)。如果只有一个连接,他将按下完成按钮,回调函数将调用“screen4();并且外包是好的。否则(有超过1个连接)他按下一个按钮和回调函数调用“screen3();”。 因此,当我们有多个连接时,我再次调用screen3时出现问题..

当我调用下一个屏幕关闭最后一个屏幕时,还有什么方法吗? 因为当我们找到一种一次又一次调用screen3的方法时,会有很多GUI打开,它会让用户感到困惑和烦恼。

一些代码:

屏幕1中的

,下一个按钮:

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
screen2();
屏幕2中的

,下一个按钮:

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

screen3();
屏幕3中的

,下一个按钮,然后是结束按钮:

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
screen3();

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
screen4();

在screen3中我如何使用2个节点之间的连接:

function edit2_Callback(hObject, eventdata, handles)
% hObject    handle to edit2 (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 edit2 as text
%        str2double(get(hObject,'String')) returns contents of edit2 as a double

global hopsMatrix;
i = str2num(get(handles.edit2, 'string'));
j = str2num(get(handles.edit1, 'string'));
hopsMatrix(i,j) = 1;

1 个答案:

答案 0 :(得分:1)

我不会再打电话给screen3()。您可以清除编辑字段,显示成功消息并让他再次进入。

将您的数据评估(您当前在edit2_Callback中拥有的部分)移至“下一步”按钮,然后在获得数据后

set(handles.edit1, 'String', '');
set(handles.edit2, 'String', '');
set(handles.text1, 'String', sprintf('Connection (%d, %d) was added.',i,j));

不要忘记在某处添加静态文本字段以显示消息(它应该自动接收句柄text1)。

这样,用户可以根据需要添加任意数量的节点,单击“下一步”清除字段并添加另一个连接,或单击“完成”继续。
不需要在edit2回调中添加与数据的连接(这也会带来一些问题,例如,如果用户先输入第二个点,或者在他输入第一个点时注意到错误第二个编辑字段中的内容。)


至于删除,每个GUI都有handles.figure1中其父图的句柄,您可以在调用下一个之前关闭它。所以不要只是screen2();,而是写

close(handles.figure1);
screen2();