过剧情window时如何从键盘获取字符?

How to get a character from the keyboard when over the plot window?

我在显示绘图时需要一些键盘输入。使用 waitforbuttonpress() 功能,我可以检测是否按下了鼠标按钮或键盘上的某个键,但我无法选择特定的 key/character。

我需要一种从绘图输出 window 而不是文本控制台的方法。

这是我目前拥有的:

clf;
colormap ("default");

filename_orig = "./orig.data"

load("-text", filename_orig, "M")

M

t = 1

h = imagesc (M(:,:,t));

title ("Test data");
xlabel ("x");
ylabel ("y");

# Loop across time
b = 0;
for i = 1:10
  for t = 1:size(M,3)
    title(["Test data; t = ", num2str(t)]);
    set(h, 'cdata', M(:,:,t))   # update latest frame
    pause(0.20)                 # keep >0 to ensure redraw
    b = waitforbuttonpress();
    if(b == 1)
      break;
    endif
  end
  if(b == 1)
    break;
  endif
end

我想删除外层循环,并允许根据用户的按键increment/decrement t 变量。

顺便问一下,是否可以删除双 break 以退出嵌套循环?

理想情况下,这就是我想要的:

# Loop across time
b = 0;
t = 0;
while(1)
  title(["Test data; t = ", num2str(t)]);
  set(h, 'cdata', M(:,:,t))   # update latest frame
  pause(0.20)                 # keep >0 to ensure redraw
  k = readKeyboard();   # pseudo function
  if(k == '+')
    t = t + 1;
  endif
  if(k == '-')
    t = t - 1;
  endif
  if(t < 0)
    t = max;
  endif
  if(t > max)
    t = 0;
  endif
end

您可以将 WindowKeyPressFcn 回调函数附加到图中:

global t
function my_cbf(object, event)
  k = event.key;
  if(k == '+')
    t = t + 1;
  end
  ...
end

figure_handle = gcf();
set(figure_handle, 'WindowKeyPressFcn', my_cbf)