alex_feng 发表于 2007-11-28 17:45

为什么我在Axes中显示图片或画图后,Axes的Tag没有了

如题,我的GUI里面有个Axes (Tag: axes1), 用axes(handles.axes1); plot(1:100,sin(1:100)); 显示图片后,我想加入一下操作:鼠标点击图片中某个地方然后用text命令显示信息。用了ButtonDownFcn加入text后却发现点鼠标并无反应,我检查才发现此时原本tag='axes1'的Axes控件的tag=''了。弄了好久也不行,请问这是什么问题,该怎么做? 谢谢!

alex_feng 发表于 2007-11-29 09:48

是我表述的不购清除吗

我写个例子吧,我两次运行test,第一次 直接用鼠标点axes1,在edit中会显示hello, 第二次我点graph按钮Plot图形后再点axe1,edit中却没有反应。 我设置断点在"set(handles.edit1,'String','hello');"发现当显示plot图形后程序便跑不到这里来,因此就不会对edit有任何操作。 请问,我该怎么做才能在显示plot图形后还可以进行鼠标控制呢? 谢谢!

function varargout = test(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',gui_Singleton, ...
                   'gui_OpeningFcn', @test_OpeningFcn, ...
                   'gui_OutputFcn',@test_OutputFcn, ...
                   'gui_LayoutFcn',[] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end

function test_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);


function varargout = test_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;


function pushbutton1_Callback(hObject, eventdata, handles)
= uigetfile('*.jpg');
axes(handles.axes1);
str = strcat(path,file);
= imread(str);
imshow(X);

function axes1_ButtonDownFcn(hObject, eventdata, handles)
set(handles.edit1,'String','hello');

function edit1_Callback(hObject, eventdata, handles)

function edit1_CreateFcn(hObject, eventdata, handles)

if ispc
    set(hObject,'BackgroundColor','white');
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function pushbutton2_Callback(hObject, eventdata, handles)
axes(handles.axes1);
plot(1:100,sin(1:100));

alex_feng 发表于 2007-11-29 10:05

刚刚看了论坛以前的帖子

发现这样该可以在画出来到图片中用鼠标标记。 可是还是有个问题,这个方法只能在没有曲线的地方点标记,却不能在曲线上点。 为什么呢?
function pushbutton2_Callback(hObject, eventdata, handles)
axes(handles.axes1);
plot(1:100,sin(1:100));
set(handles.axes1,'ButtonDownFcn',@myfcn);
function myfcn(hObject, eventdata, handles);
pt=get(gca,'currentpoint');
hold on
text(pt(1,1),pt(1,2),['(' num2str(pt(1,1),3) num2str(pt(1,2),3) ')']);
plot(pt(1,1),pt(1,2),'b*');

alex_feng 发表于 2007-11-29 10:14

不好意思了,这样就行了

原来给plot加handle就行了,才疏学浅,笑话了。
:@$
function pushbutton2_Callback(hObject, eventdata, handles)
axes(handles.axes1);
a = plot(1:100,sin(1:100));
set(a,'ButtonDownFcn',@myfcn);
function myfcn(hObject, eventdata, handles);
pt=get(gca,'currentpoint');
hold on
text(pt(1,1),pt(1,2),['(' num2str(pt(1,1),3) num2str(pt(1,2),3) ')']);
plot(pt(1,1),pt(1,2),'b*');
可以了

eight 发表于 2007-11-29 10:24

很多问题,只要你肯自己动手搜索、并且尝试一下,就能解决的
页: [1]
查看完整版本: 为什么我在Axes中显示图片或画图后,Axes的Tag没有了