Проблема, с которой вы столкнулись, состоит в том, что структура значений, передаваемых в функцию открытия для handles
, фиксируется на том, что было при вызове функции открытия.Вы никогда не получите новую структуру, которая обновляется на pushbutton_Callback
.Вы можете получить новую структуру, вызвав GUIDATA в вашем цикле.Вот как я бы посоветовал вам попробовать написать цикл:
handles.stop_now = 0; %# Create stop_now in the handles structure
guidata(hObject,handles); %# Update the GUI data
while ~(handles.stop_now)
drawnow; %# Give the button callback a chance to interrupt the opening function
handles = guidata(hObject); %# Get the newest GUI data
end
Большая проблема с дизайном графического интерфейса ...
На основании дополнительного описания в вашем комментарии о том, что вы пытаетесь выполнитьВаш графический интерфейс, я думаю, что может быть лучший способ создать его.Вместо того, чтобы иметь непрерывный цикл для пользователя, чтобы повторно вводить области интереса, которые он затем должен нажимать на кнопку, чтобы остановить, вы можете покончить с циклом и кнопкой остановки и добавить кнопку «Добавить область интереса» в свой графический интерфейс.Таким образом, пользователь может просто нажать кнопку, когда он хочет добавить еще один ROI.Сначала вы можете заменить цикл for в функции открытия следующими инициализациями:
handles.nROIs = 0; %# Current number of ROIs
handles.H = {}; %# ROI handles
handles.P = {}; %# ROI masks
guidata(hObject,handles); %# Update the GUI data
Затем вы можете заменить обратный вызов для вашей кнопки чем-то вроде следующего:
function pushbutton_Callback(hObject,eventdata,handles)
%# Callback for "Add new ROI" button
nROIs = handles.nROIs+1; %# Increment the number of ROIs
hROI = imfreehand; %# Add a new free-hand ROI
position = wait(hROI); %# Wait until the user is done with the ROI
handles.nROIs = nROIs; %# Update the number of ROIs
handles.H{nROIs} = hROI; %# Save the ROI handle
handles.P{nROIs} = hROI.createMask; %# Save the ROI mask
guidata(hObject,handles); %# Update the GUI data
end