How can pause/stop/resume/run Matlab gui code?
古いコメントを表示
I have developed a code for run/pause the code which is palying a song and plotting a figure. However, inside my while 1, the result of button4 is not update. Where is my fault?
function pushbutton1_Callback(hObject, eventdata, handles)
set(handles.pushbutton4, 'userdata', 1);
while 1
a= get(handles.pushbutton4, 'userdata')
if a==0
disp('break');
break;
else
disp('inside loop');
end
end
function pushbutton4_Callback(hObject, eventdata, handles)
if get(handles.pushbutton4,'userdata')==1
set(handles.pushbutton4,'userdata',0);
else
set(handles.pushbutton4,'userdata',1);
end
2 件のコメント
Jan
2017 年 8 月 9 日
By the way: You can simplify the callback:
function pushbutton4_Callback(hObject, eventdata, handles)
handles.pushbutton4.UserData = ~handles.pushbutton4.UserData;
Hassan Bosha
2019 年 2 月 17 日
What is the user data ?
should it be written like this ?
function Resume_Callback(hObject, eventdata, handles)
handles.Resume.UserData = ~handles.Resume.UserData;
回答 (3 件)
You cannot directly stop Matlab code by a GUI. Note that the callback of the GUI would be stopped also.
You can control the execution of a loop through a GUI, if you request e.g. the UserData of a certain button, which is toggled in its callback.
What is the actual problem you want to solve?
[EDITED] Give the figure a chance to update its properties by inserting drawnow:
while 1
drawnow;
a = get(handles.pushbutton4, 'userdata');
...
3 件のコメント
amir nemat
2017 年 8 月 8 日
Jan
2017 年 8 月 9 日
See [EDITED]
Luis Cavalcante Fraga
2019 年 2 月 21 日
Thanks for your help, Jan ! This is the second time you save my app.
Image Analyst
2017 年 8 月 7 日
0 投票
See attached demo.
Akhilesh Thakur
2017 年 8 月 8 日
0 投票
function pushbutton1_Callback(hObject, eventdata, handles)
set(handles.pushbutton4, 'userdata', 1);
This set(handles.pushbutton4, 'userdata', 1); is wrong. Because you are writing handles.pushbutton4 in the callback of pushbutton1. You are missing guidata(hObject,handles) in your pushbutton4 callback. This will update your handles structure and it will work.
6 件のコメント
Akhilesh Thakur
2017 年 8 月 8 日
This won't work unless you add guidata(hObject,handles). This should make your program work.
Hope this helps
Image Analyst
2017 年 8 月 9 日
I had already suggest this, and we're waiting to hear back.
Eric Keller
2017 年 8 月 9 日
I use getappdata/setappdata for semaphores. guidata just seems too complex and almost surely uses the same mechanism. You can have as many named appdata structures as you want.
Image Analyst
2017 年 8 月 9 日
That would work too. Both getappdata/setappdata and guidata are just one line of code.
Image Analyst
2017 年 8 月 9 日
Isn't the UserData a property of the button and thus stored in the handles structure along with all the other properties of the button? And if you change handles, like a field of it or adding a new field, those changes are local and vanish once the function exists unless you call guidata, or pass handles out as a return argument if the function is a custom function rather than a callback function of a control.
And I thought drawnow just repaints the screen which will just show the same screen unless some property of the control which is visible had been changed.
カテゴリ
ヘルプ センター および File Exchange で Interactive Control and Callbacks についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!