How to automtically update editText box with 'new axes limit' when Zoom tool has changed the axes limit?

1 回表示 (過去 30 日間)
I am looking at an example with zoom given in Matlab help:
function demo
% Listen to zoom events
plot(1:10);
h = zoom;
set(h,'ActionPostCallback',@mypostcallback);
set(h,'Enable','on');
%
function mypostcallback(obj,evd)
newLim = get(evd.Axes,'XLim');
msgbox(sprintf('The new X-Limits are [%.2f %.2f].',newLim));
----------------------------------------------
How would I update an existing editText box with the newLim from within mypostcallback()? Or would I have to create an event listener? Then how would I do that?
  1 件のコメント
betty bowles
betty bowles 2016 年 5 月 19 日
I am trying to use this with the toolbar zoom using guide. Do I need to overwrite the callback function in order to set the 'ActionPostCallback' to respond with @mypostcallback? If so, I am not sure what the default callback on the tool does other than call zoom(). Please advise.

サインインしてコメントする。

採用された回答

Geoff Hayes
Geoff Hayes 2016 年 5 月 19 日
betty - I don't think that you need an event listener, you just need the means at which to access the handle to the edit text control. From the above example, you haven't indicated how you are using this code or how you have created your GUI, but let's assume that you have done so with GUIDE. Suppose that you have an axes, a (say) checkbox to enable or disable the zoom, and a text box to display the axes limits. Then in the checkbox callback we enable or disable the zoom as
function checkbox1_Callback(hObject, eventdata, handles)
if get(hObject,'Value') == 1
if ~isfield(handles,'hZoom')
handles.hZoom = zoom;
set(handles.hZoom,'ActionPostCallback',@zoomPostCallback);
guidata(hObject,handles);
end
set(handles.hZoom,'Enable','on');
else
if isfield(handles,'hZoom')
set(handles.hZoom,'Enable','off');
end
end
In the zoom post action callback we do
function zoomPostCallback(hObject,event)
handles = guidata(hObject);
if isfield(handles,'text1')
set(handles.text1,'String',num2str(get(handles.axes1,'XLim')));
end
In the above, we use the hObject input parameter to get the handles structure (via guidata) which will have the handle to the text1 control. We update that control using the new limits of axes1. See the attached for a simple example.
  2 件のコメント
betty bowles
betty bowles 2016 年 5 月 19 日
thank geoff, it was the @zoomPostCallback() input argument 'hObject' i hadn't connected the dots with. so I assume you could still use the 'event' input argument to access the 'Axes.xLim'?
Geoff Hayes
Geoff Hayes 2016 年 5 月 19 日
Yes, you could still use the event object.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeGraphics Object Properties についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by