【发布时间】:2014-06-02 14:47:03
【问题描述】:
我对 MATLAB GUI 编程非常陌生(抱歉,使用 GUIDE)并且我遇到以下问题:GUI 在轴上显示存储在单元阵列中的图像序列。我有几个按钮和一个滑块来滚动序列。为了获得“连续滑块”,我使用了一个侦听器,这种方法可行但会产生一些问题:
1) 当我按下滑块时,会创建一个图形并在其中显示序列的第一帧,但是当我移动滑块时,序列会显示在我的 GUI 的轴上(这就是我想要的)并且这个数字变成了空的。谁能告诉我为什么要创建这个数字以及如何避免它?
2) 一旦我按下滑块按钮并因此使用监听器,GUI 内的所有句柄都不起作用,因为 Matlab 无法识别它们,我被困在一个功能滑块/显示器上,但我不能使用按钮.
关于为什么会发生这种情况的任何想法?这是我在滑块的 Create Function 中使用的代码:
function slider2_Frame_Video_Callback(hObject, eventdata, handles)
hListener = addlistener(hObject,'ContinuousValueChange',@(a,b) slider2_Frame_Video_Callback(hObject, eventdata, handles)); % a and b are dummy arguments
guidata(hObject,handles)
在滑块回调中,代码如下(基本上是在当前轴上显示):
axes(hAxis)
imshow(Movie{frame},'parent',hAxis);
drawnow
% 这也不起作用,因为 Handles.edit_FrameNumber 不能被 Matlab 识别
set(handles.edit_FrameNumber, 'String', frame);
guidata(hObject,handles);
欢迎任何提示谢谢!
【问题讨论】:
-
好的,谢谢 Geoff,你是对的!此外,如果我使用外部函数连续显示当前帧(而不是在滑块回调中),它似乎可以工作。 “电影”单元格数组存储在一个结构中,其中包含我使用 setappdata/getappdata 在回调之间共享的所有全局变量;它阻止我在每个回调开始时将变量声明为“全局”。此外,如果它对阅读本文的人有任何帮助,那么当我使用侦听器时出现在 GUI 之外的数字是由于我之前调用了“gca”。
标签: matlab slider listener matlab-guide