в то время как цикл блокирует чтение обратных вызовов из графического интерфейса - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь добавить кнопку остановки в графический интерфейс, который можно использовать для прерывания графического интерфейса и выполнения фонового цикла while.Рассмотрим код:

function pushFun(button)
    disp("Push!")
endfunction

h = figure(1);
set(h,'UserData',1);

button = uicontrol(h, 'Style', 'pushbutton', 'String', 'Stop',..
        'Position', [0 0 60 25], 'callback', 'pushFun',..
        "callback_type", 2);

, который отлично работает.Но код:

function stopgui()
    global guistop;
    guistop = %t;
endfunction

h = figure(1);
set(h,'UserData',1);

global guistop
guistop = %f;

button = uicontrol(h, 'Style', 'pushbutton', 'String', 'Stop',..
        'Position', [0 0 60 25], 'callback', 'stopgui',..
        "callback_type", 2);

while ~guistop

    // some code here
    sleep(100)
end

не реагирует на взаимодействия кнопок.Буду признателен, если вы поможете мне узнать, что не так и как я могу это решить.

PS похожие обсуждения: один , два .

1 Ответ

1 голос
/ 21 марта 2019

Вы должны использовать тип обратного вызова 10 (приоритетные (или непрерывные) инструкции Scilab):

button = uicontrol(h, 'Style', 'pushbutton', 'String', 'Stop',..
                   'Position', [0 0 60 25], 'callback', 'stopgui',..
                   'callback_type', 10);
...