用户界面-如何仅在按下按钮时显示图片(Matlab指南)



我正在尝试使用GUIDE创建Matlab GUI。我想插入一张图片与图片显示只有当我按下一个按钮(回调函数),并显示默认图片一旦按钮被释放。我该如何实现呢?我使用坐标轴在提到的位置显示图片

function mc_right_Callback(hObject, eventdata, handles)
% hObject    handle to mc_right (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
matlabImage2 = imread('Coor2.png'); 
imshow(matlabImage2, 'Parent', handles.axes7);
%Vxm_Port_Send(handles.port_handle,sprintf('F,C,I3M-%d,R',handles.x_steps)); % Move along +x (right)

问题是MATLAB uicontrol不允许您创建在按钮按下或按钮释放上执行的单独回调函数。例如,按钮将在按钮释放时执行其Callback函数。它也有一个ButtonDownFcn功能,将执行一个按钮按下,但这个回调只有在Enable属性被设置为'off''inactive'时才有效,在这种情况下,Callback功能被禁用。换句话说,您不能同时使用ButtonDownFcnCallback来分别获得按钮按下和释放的响应。

然而…

图形窗口确实有办法为按钮按下、按钮释放、甚至鼠标移动或滚轮活动指定单独的回调函数。这就是我通常克服uicontrol行为缺点的方法:我定义图形级回调,当它们在窗口的某些部分上方时执行。下面是一个例子:

function press_release
  % Load a sample image:
  imgData = imread('peppers.png');
  % Create the figure and graphics objects:
  hFigure = figure('WindowButtonDownFcn', @press_fcn, ...
                   'WindowButtonUpFcn', @release_fcn);
  hImage = image(imgData, 'Visible', 'off');
  hButton = uicontrol(hFigure, 'Style', 'pushbutton', ...
                               'Position', [10 10 30 30], ...
                               'Enable', 'inactive');
  function press_fcn(~, ~)
    if isequal(hButton, get(hFigure, 'CurrentObject'))
      set(hImage, 'Visible', 'on');
      set(hButton, 'Value', 1);
    end
  end
  function release_fcn(~, ~)
    set(hImage, 'Visible', 'off');
    set(hButton, 'Value', 0);
  end
end

当你运行上面的代码时,它将创建一个窗口,在左下角有一个轴和一个小按钮。按钮没有定义回调。当你点击鼠标的任何地方,但在按钮没有发生。但是,当您在按钮上单击鼠标(使其为图形的CurrentObject)时,图像将变得可见,并且当您按住按钮时,按钮将按下。释放按钮使图像再次不可见,按钮显示正常。从本质上讲,按钮只是一个假人,除了给用户一种他们按下它来让事情发生的错觉外,它什么也不做。实际上是图形回调函数在起作用

相关内容

  • 没有找到相关文章

最新更新