• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Matlab的GUI中坐标轴载入图片后axes的ButtonDownFcn函数使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

我的程序任务很简单,就是当在一幅图像上单击的时候,( 可编辑文本框 )实时显示当前鼠标单击点的坐标。

1、figure的windowbuttondown函数是当鼠标在figure中点击时(无论是左键还是右键),程序调用的回调函数。这时,程序不管鼠标是在那一个控件的区域内,只要点击,都调用该函数;
2、axes或其它控件的ButtonDownFcn函数是当控件位于该控件的区域内时,点击时所调用的函数。matlab如何区分控件呢?是通过控件的句柄--handle来区别的。
    初次建立axes控件时,系统获得一个句柄,这个句柄是和该axes是对应的;当显示了图片以后,原先的axes改变了(包括axes轴的x、y轴的范围,比例等),再点击axes轴,这时是点击的图片,并不是原先的axes了,所以ButtonDownFcn当然不会被调用了,但windowbuttondown照样被调用。
3、解决的办法是:在用imshow或其它函数显示完图像时,用h=imshow等取得显示的图像的句柄,定义图像对象的ButtonDownFcn回调函数为自己定义的函数。
--------------------- 
 

matlab GUI中AXES显示图像后响应buttondownfcn的问题

一旦在这个axes上显示图像之后,那个ButtonDownFcn就没有反应了
也就是在这个callback函数中的任何代码都不执行了
我调试了一下,可以解决的。方法如下:
(1)在你的GUI的OpeningFcn函数中加入如下代码:

% UIWAIT makes imButttonDown wait for user response (see UIRESUME)
% uiwait(handles.figure1);

 im = imread('worldMap_1440_720.jpg');
 axes(handles.axesWorldMap);   %在坐标轴下画图
 h = imshow(im);   %显示图像,同时取得图像的句柄(handle)
 set(h,'ButtonDownFcn',@myimButttonDownFcn); %设置图像对象的ButtonDown回调函数为自己定义的myimButttonDownFcn
 
 handles.h=h;   %保存图像的句柄到handles结构,以备后用
 guidata(hObject, handles);    % Update handles structure

(2)在自己定义的myimButttonDownFcn函数中加入代码:
          

function myim_ButttonDownFcn(hObject, eventdata, handles)  %自定义的myCallback函数
  global DataStruct;    %在鼠标动作程序里添加全局变量

  loc = get(gca,'CurrentPoint');    
%  pos = get(hObject,'CurrentPoint');    %此处结果和上行代码结果一样
  x0 =loc(1,1);
  y0 =loc(1,2);    %获取点坐标数值
  x00 = num2str(x0);
  y00 = num2str(y0);  %转换成字符串
  
  DataStruct.x0 = x00;    %赋值给全局变量结构体
  DataStruct.y0 = y00;

  
end
          ........%在此加入你的代码
--------------------- 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
MATLAB的向量,矩阵和阵列命令发布时间:2022-07-18
下一篇:
Rust: 生命周期发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap