我正在尝试用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;
答案 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();