Кнопка «Следующая пробная версия» в MATLAB - PullRequest
1 голос
/ 01 февраля 2012

У меня есть скрипт этого MATLAB-скрипта:

function semjudge

clc;

name = input('Name: ','s');
snum = input('Subject #: ','s');

files = dir(fullfile('pictures','*.png'));
index = randperm(length(files));
picture1 = files(index(1)).name;
picture2 = files(index(2)).name;
image1 = fullfile('pictures',picture1);
image2 = fullfile('pictures',picture2);
subplot(1,2,1); imshow(image1); title(picture1);
subplot(1,2,2); imshow(image2); title(picture2);

uicontrol('Style', 'text',...
        'Position', [200 45 200 20],...
        'String','How related are these pictures?');
uicontrol('Style', 'text',...
        'Position', [50 45 100 20],...
        'String','Unrelated');
uicontrol('Style', 'text',...
        'Position', [450 45 100 20],...
        'String','Closely related');
uicontrol('Style','pushbutton','String','Next Trial',...
        'Position', [250 350 100 20],...
        'Callback','next');

h = uicontrol(gcf,...
   'Style','slider',...
   'Min' ,0,'Max',50, ...
   'Position',[100 20 400 20], ...
   'Value', 25,...
   'SliderStep',[0.02 0.1], ...
   'BackgroundColor',[0.8,0.8,0.8]);

set(gcf, 'WindowButtonMotionFcn', @cb);

lastVal = get(h, 'Value'); 

function cb(s,e)
    if get(h, 'Value') ~= lastVal 
    lastVal = get(h, 'Value'); 
    fprintf('Slider value: %f\n', lastVal); 
    end
end

end

При этом на экран выводятся два случайных изображения из каталога с полосой прокрутки и инструкциями для определения уровня родства / сходства между двумя изображениями с позицией на полосе прокрутки. Это все хорошо.

Однако я хочу установить его так, чтобы при нажатии кнопки «Следующая пробная версия» экран перезагружался с двумя НОВЫМИ случайными изображениями и полосой прокрутки обратно посередине. Как мне это сделать? Я не могу найти какие-либо инструкции о том, как сделать это в Интернете.

1 Ответ

2 голосов
/ 01 февраля 2012

Что-то вроде этого:

uicontrol('Style','pushbutton','String','Next Trial','Position', [250 350 100 20],'Callback','clf; semjudge()');

clf, чтобы очистить окно рисунка: http://www.mathworks.de/help/techdoc/ref/clf.html;, и после этого ваша функция просто вызывается снова, что затем будет отображаться в одном и том же окне!

...