gpt4 book ai didi

matlab gui - 调用相同的 GUI 屏幕

转载 作者:行者123 更新时间:2023-12-02 11:32:58 28 4
gpt4 key购买 nike

我正在尝试在 matlab、GUI 中用户输入点作为输入和它们之间的连接。

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

在 globalParams 中,我有全局参数,因此我可以在屏幕 GUI 之间使用它们。在 screen1 中,用户输入节点数(例如 5)。当他按下“下一步”按钮时,回调函数调用“screen2();”。在 screen2.m 中,用户输入 (x,y) 坐标,当他按下 Next 按钮时,回调函数调用“screen3();”。

现在我要求他填写节点 i 到节点 j 之间的连接。(他需要填写节点 i 和 j 的编号)。如果只有 1 个连接,他将按“完成”按钮,回调函数将调用“screen4();”,一切都很好。否则(有超过 1 个连接)他按“下一步”按钮和回调函数调用“screen3();”。因此,当我们有超过 1 个连接时,我再次调用 screen3 时会遇到问题...

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

一些代码:

在 screen1 中,下一个按钮:

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();

在 screen2 中,下一个按钮:

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();

在 screen3 中,下一步按钮,然后完成按钮:

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 中我如何使用两个节点之间的连接:

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;

最佳答案

我不会再调用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();

关于matlab gui - 调用相同的 GUI 屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21779807/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com