Отображение результата в графическом интерфейсе с обратным вызовом - PullRequest
0 голосов
/ 10 марта 2019

У меня есть этот код:

button1 = uicontrol(p, "string", "1", "units", "normalized",...
         "position", [0 0 1/3 1/6], ...
         "BackgroundColor", [0, 0.8, 0.8], ...
         "relief", "solid", ...
         "userdata", [A], ...
         "callback", "A = evstr(gcbo.userdata(1).string); area = calculate1(A); gcbo.userdata(2).string = string(area)");

Это для кнопки в графическом интерфейсе, которая имеет две другие кнопки (см. Рисунок).Цель состоит в том, чтобы после нажатия кнопки результат отображался вместо трех точек.Я протестировал код несколько раз, и часть не работает, это обратный вызов.Он на самом деле оценивает значения в целом работает хорошо, но я не могу получить результат на своем сайте.

Я буду очень благодарен, если кто-нибудь сможет мне помочь.

Вот как выглядит окно:

enter image description here

1 Ответ

0 голосов
/ 11 марта 2019

Прежде всего было бы легче помочь, если бы вы могли опубликовать Минимальный, Полный и Проверяемый пример . Не воспроизводимые вопросы, как правило, недооцениваются или блокируются. Во-вторых, помещать многострочный скрипт Scilab в строку callback - плохая практика. Определить функцию:

function changeText()
   A = evstr("gcbo.userdata(1).String");
   area = calculate1(A);
   gcbo.userdata(2).String = string(area);
endfunction

и измените этот фрагмент кода на:

button1 = uicontrol(p, "string", "1", "units", "normalized",...
         "position", [0 0 1/3 1/6], ...
         'style', 'pushbutton',
         "BackgroundColor", [0, 0.8, 0.8], ...
         "relief", "solid", ...
         "userdata", [A], ...
         "callback", "changeText", "callback_type", 2);

где "callback_type", 2 убедитесь, что функция Scilab запускается при каждом нажатии кнопки.

Теперь представьте, что у вас есть текст:

text1 = uicontrol(p, "style", "text", "string", "....")

Вам нужно сделать глобальную переменную text1, а затем изменить значение text1.String внутри функции обратного вызова. Это должно выглядеть так:

global text1;

function changeText()
   global text1;
   A = evstr("gcbo.userdata(1).String");
   area = calculate1(A);
   gcbo.userdata(2).String = string(area);
   text1.String = "some data here";
endfunction

button1 = uicontrol(p, "string", "1", "units", "normalized",...
         "position", [0 0 1/3 1/6], ...
         'style', 'pushbutton',
         "BackgroundColor", [0, 0.8, 0.8], ...
         "relief", "solid", ...
         "userdata", [A], ...
         "callback", "changeText", "callback_type", 2);

text1 = uicontrol(p, "style", "text", "string", "....")

Если вы отправите MCVE, тогда я могу помочь лучше. Успех.

...