필터 지우기
필터 지우기

how to cause a change in the colour of a push button every time it is pressed ?

조회 수: 14 (최근 30일)
how to insert a pushbutton in GUI that can change its color everytime the pushbutton is pressed. I need it to switch its color to another color
so for example: I need in first push change to green in second push into orange and after 6 colors have been placed i need it to repeat the same series of color back again after all 6 colors specified has been displayed then need to save its state. so how can i do that please ? .Thanks in advance.
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

채택된 답변

Kevin Phung
Kevin Phung 2019년 2월 26일
편집: Kevin Phung 2019년 2월 26일
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
colors = [ 1 0 0; 0 1 0; 0 0 1] %this will be your array of colors
if hObject.UserData == size(colors,1)
hObject.UserData = 0 %if it reaches the end, reset
end
hObject.UserData = hObject.UserData + 1; %stores this data within the button itself
state = hObject.UserData;
hObject.BackgroundColor = colors(state,:);
%note: ForegroundColor is the color of the string, BackgroundColor is the color of the button
make sure you set the 'UserData property of your button to 0 for its initial state, example :
button = uicontrol('style','pushbutton',...
'callback',@pushbutton1_Callback,...
'UserData',0)
In this example, button will turn from red, green, blue, then the cycle repeats.
Can you be clear as to what you mean by 'saves its state?'
  댓글 수: 7
Robin Stengl
Robin Stengl 2019년 12월 9일
Hey guys, i have the same problem with the length of the vector. And I have not got the line : hObject.UserData =0
what should i do now?
And where should i place the button = ... in my gui
Thank you for your help

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Steve Kulakowski
Steve Kulakowski 2019년 2월 26일
편집: Steve Kulakowski 2019년 2월 26일
Hello,
The way in which I know how to do it is as follows. You may have to tweak the code a little before it works properly, but the general idea is that you need a global variable outside of your function call. The if/else statement will toggle everytime the pushbutton is called. Also I'm sure there are other/better ways to do this, but this is the only way I know how.
Best of luck!
global control
control = 1
function pushbutton1_Callback(hObject, eventdata, handles)
global control
if control == 1
set(handles.pushbutton,'BackgroundColor',[0 1 0]);
control = 0
else
set(handles.button_connect_s1,'BackgroundColor',[1 0 0]);
control = 1
end
end
  댓글 수: 2
Stephen23
Stephen23 2019년 2월 26일
It is recommended to use guidata rather than a global variable.
Dany Majed
Dany Majed 2019년 2월 26일
편집: Dany Majed 2019년 2월 26일
i do quiet understand what are you trying to say but if you realize after the first if statement which is (if control == 1) the program will turn the button into the other color and will end the process after that so in the other pushes of the button the button will remain same color and i am still a beginner so can't tweak the code that much so if you could please help me with that.Thanks in Advance.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Interactive Control and Callbacks에 대해 자세히 알아보기

제품


릴리스

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by