Change button Enable after two other buttons have been pressed

6 visualizzazioni (ultimi 30 giorni)
Hello - I'm trying to get two buttons to become Enabled after two other buttons have been pressed. I'm not sure what I'm doing wrong here, but I'm pretty new to MATLAB and am likely making a silly mistake. This was a procedurally made GUI.
I set up the handles structure:
fighandl=figure;
handles = guihandles(fighandl);
%button visibility tracker
handles.firstVis = 0;
handles.secondVis = 0;
guidata(fighandl,handles);
Here's the code for the button creation (only including what's necessary):
push1=uicontrol('Style','pushbutton',...
'String','Play Excerpt 1',...
'Units','Normalized',...
'Position',[0.05 0.6 0.4 0.3],...
'Callback',@push1_Callback);
push2=uicontrol('Style','pushbutton',...
'String','Play Excerpt 2',...
'Units','Normalized',...
'Position',[0.55 0.6 0.4 0.3],...
'Callback',@push2_Callback);
handles.push3=uicontrol('Style','pushbutton',...
'String','Prefer Excerpt 1',...
'Position',[0.05 0.3 0.4 0.2],...
'Enable','off',...
'Callback',@push3_Callback);
handles.push4=uicontrol('Style','pushbutton',...
'String','Prefer Excerpt 2',...
'Position',[0.55 0.3 0.4 0.2],...
'Enable','off',...
'Callback',@push4_Callback);
And here are the callback functions (I'm only including the two that play a role in enabling push3 and push4, which are virtually identical):
function push1_Callback(push1, eventdata, handles, whichsound)
handles = guidata(gcf);
%tracker to see if both buttons have been pressed
handles.firstVis = handles.firstVis+1;
if (handles.firstVis>=1 && handles.secondVis>=1)
%this is not working
%it will display 'yay' but not update button visibility.
disp('Yay');
set(handles.push3,'Enable','on');
set(handles.push4,'Enable','on');
end
%store info
guidata(gcf,handles)
And the second function
function push2_Callback(push2, eventdata, handles, whichsound)
% Get the structure using guidata in the local function
handles = guidata(gcf);
%tracker to see if both buttons have been pressed
handles.secondVis = handles.secondVis+1;
if (handles.firstVis>=1 && handles.secondVis>=1)
%this is not working
%it will display 'yay' but not update button visibility.
disp('Yay');
set(handles.push3,'Enable','on');
set(handles.push4,'Enable','on');
end
guidata(gcf,handles)
  7 Commenti
Walter Roberson
Walter Roberson il 24 Ago 2018
The guidata(fighandl,handles); has to go after your last assignment into the handles structure
aburl
aburl il 24 Ago 2018
Modificato: aburl il 24 Ago 2018
Jeez, that makes sense. Thank you, that worked beautifully! I just recently wrapped my head around the handles structure, so it's a learning process.
Is there a downside to having this at the end of the GUI.m file? That's where I moved it and everything was happy.
Edit: Happy to give you an answered question or anything that might help you - thanks for the help!

Accedi per commentare.

Risposte (0)

Categorie

Scopri di più su Interactive Control and Callbacks in Help Center e File Exchange

Prodotti


Release

R2015a

Community Treasure Hunt

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

Start Hunting!

Translated by