Matlab中的事件监听器创建新图形而不是更新旧图形



大家好

我在一个GUI上遇到了一点麻烦,基本上我有一个滑动条,我用它来改变我正在观看的图像的对比度。

图像本身是一个轴形图形,在过去的几个月里,我一直在使用slider Callback来更新图像,使其具有新的对比度值,但正如您所知,图像只有在您放开鼠标后才会更新。现在我想让图像随着滑动条的移动不断更新。我已经用一个事件监听器完成了这样的操作:

addlistener(handles.dispmaxslider,'ContinuousValueChange',@(hobject, event) maxSliderChanged(hObject, event, handles));
在maxSliderChanged中,我所做的就是将当前轴设置为GUI中的轴并通过调用 来使用新值更新图像
 imshow(image, [min max]);

其中的min和max由我的滑块定义。现在,当我使用滑块而不是更新坐标轴时,问题就出现了,我已经通过调用

来保护坐标轴
axes(currentAxes)

这确保在每次更新之后,更新后的图像显示在正确的位置。但是现在,当我移动滑块时,会创建一个新的图形,并且在每次调用之后都会更新该图像,就好像我从未调用过axes()方法一样。我怀疑我的addListener函数中有一些东西可以用来防止这种情况,但是解决方案逃避了我。任何想法吗?

刚刚破解了它,如果有人感兴趣,我对imshow()方法做了一个简单的更改,以强制它更新特定的UI元素。像这样:

axes(currentAxes);
imshow(image, [min max]);

就变成:

imshow(image, [min max], 'Parent', axisHandle);

这样,正确的图像面板现在将响应滑动条的变化而不断更新。

最新更新