How to deselect ToolbarStateButton without clicking on it?

6 Ansichten (letzte 30 Tage)
I have a GUI in GUIDE and I would like to deselect any ToolbarStateButton currently selected for an axes any time another button is pressed. I'm hitting dead ends. Is it possible to modify the ValueChangedFunction?
For example I click the zoom button on the axis and then I press Button1, I want to disable zoom button and change the mouse back to it's normal state (not zooming in with the crosshairs).
Deleting the toolbar does not set the mouse back to it's normal state.
Setting the Value parameter to off deselects the button on the toolbar but does not change the mouse back to it's normal non-zooming state.
Any advice would be appreciated.
UPDATE - SOLUTION: Create custom toolbar to allow access to Toolbar Children. Set all of the values to 'off', use datacursormode to turn tooltip on and then off. See below.
If anyone has a better solution please let me know.
% Non default toolbar allows access to Toolbar Children
handles.TB1 = axestoolbar(handles.Axes1,'default');
handles.TB1.Visible = 'on';
for i = 5:6 % Turn zoom buttons off
handles.TB1.Children(i).Value = 'off'
end
% Reset data cursor
datacursormode(handles.figure1,'on')
datacursormode(handles.figure1,'off')

Akzeptierte Antwort

James Thompson
James Thompson am 22 Mai 2019
% Non default toolbar allows access to Toolbar Children
handles.TB1 = axestoolbar(handles.Axes1,'default');
handles.TB1.Visible = 'on';
for i = 5:6 % Turn zoom buttons off
handles.TB1.Children(i).Value = 'off'
end
% Reset data cursor
datacursormode(handles.figure1,'on')
datacursormode(handles.figure1,'off')

Weitere Antworten (1)

Charles Mercier
Charles Mercier am 30 Jan. 2020
My approach is similar to yours, but relies on the builtin functions used by Matlab for the toolbar buttons, which makes it a bit more versatile. For instance, the following code will deselect any state button with the proper callback (for exemple the rotation button in a 3D plot as well). On a sidenote, I agree that this was an annoyance to begin with and that Matlab should include an easier way to control toolbar's interactions.
% Properly deselects any state button in the toolbar
handles.TB1 = axtoolbar(handles.Axes1,'default');
handles.TB1.Visible = 'on';
for k = 1:numel(handles.TB1.Children)
if isa(handles.TB1.Children(k),'matlab.ui.controls.ToolbarStateButton')
if strcmp(handles.TB1.Children(k).Value,'on')
e = handles.TB1.Children(k);
d = struct;
d.Source = e;
d.Axes = handles.Axes1;
d.EvenName = 'ValueChanged';
d.Value = 'off';
d.PreviousValue = 'on';
feval(handles.TB1.Children(k).ValueChangedFcn,e,d);
end
end
end

Kategorien

Mehr zu Migrate GUIDE Apps finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by