交互式对话框和图形窗口

时间:2018-03-16 14:18:04

标签: interactive scilab

我想运行一个脚本,要求用户提供输入值。为了选择该值,假定用户以图形方式查看当前结果。实际上不可能预见图的哪一部分具有用于选择参数的决定性信息,因此假设用户能够沿着图移动并在必要时重新调整它以直到做出决定。在我的脚本中,它看起来如下:

...
scf(f1);plot2d(x,y,1);
w=evstr(x_dialog('Value of the parameter ?','3.1415926'));
...

然而,在此实现中,图形窗口似乎被锁定,在给出对话框的输入之前,不能对其进行任何操作。

我很感激任何提示如何克服这个问题。

编辑:我找到了以下临时解决方案:

...
scf(f1);plot2d(x,y,1);
disp('Choose the parameter value and type ''resume'' to continue.');
pause;
w=evstr(x_dialog('Value of the parameter ?','3.1415926'));
...

但我仍然希望有更好的解决方案,例如按键盘按钮而不是输入'resume'。致对不起xclick()不起作用,因为再次阻止使用图形窗口。

1 个答案:

答案 0 :(得分:1)

x_dialog只有在点击两个按钮之一后才会返回,因此如果您保留x_dialog,则无法找到更好的解决方案。

使用回调可能会回答您的问题,但这不是一个“更好”的解决方案,因为您需要生成一个gui(请参阅uicontrol),一旦用户输入值,就会运行模拟的回调。

第一次尝试:

clc
clear
xdel(winsid())

function callback()
  // get the value, and check if its a constant
  val=msscanf(get(findobj('tag_edit'),'string'),'%e')
  if val==[] then
    error('The input could not be read as a constant.')
  end
    // Call the main function/script here
    // like 'main(val)'
    // or 'exec('main.sce')' 
endfunction

function xdialog_alt(text,default)
  f=gdf(); // get the default value
  // so the dialog will be placed next to it on the right
  fig=figure('layout','gridbag','dockable','off','infobar_visible','off','menubar_visible','off','toolbar_visible','off','figure_size',[400,70],'figure_position',f.figure_position+[f.figure_size(1),0])

  // Create the text uicontrol to explain what to enter
  c = createConstraints("gridbag",[1, 1, 1, 1], [1, 1], "both");
  uicontrol(fig,'style','text','string',text,'constraints',c)

  // Create the edit uicontrol to recieve an user inputed value
  c = createConstraints("gridbag",[2, 1, 1, 1], [1, 1], "both");
  uicontrol(fig,'style','edit','string',default,'constraints',c,'tag','tag_edit')
  // create a button to launch further computation with the inputed value
  c = createConstraints("gridbag",[3, 1, 1, 1], [1, 1], "both");
  uicontrol(fig,'style','pushbutton','string','Confirm','constraints',c,'callback','callback')
endfunction

x=0:0.3:3
y = sin(x)
plot2d(x,y,1);
xdialog_alt('Value of the parameter ?','3.1415');
// End of the script. nothing below this will be aware of the value written in xdialog_alt

这样就可以回到图表上了