create a function to press button (instead of a function calling the callback function of the button)
7 次查看(过去 30 天)
显示 更早的评论
Hi,
First of all sorry for the previous post that contains exactly this message. I did not pay attention and wrote it in the wrong section.
I made a GUI containing several buttons, each of them calling a specific callback with a bunch of arguments. For example, a button named 'my button' using two arguments arg1 and arg2 is created that way:
Positionmybutton=[0.1 0.1 0.1 0.1];
uicontrol(fh_gui,...
'units', 'normalized','Position',Positionmybutton,...
'String','my button',...
'Callback',{@button_callback,arg1,arg2});
I can very easily find the object 'my button' since I know its position in the figure (use of findobj).
Remind now that I have several buttons (e.g. button1, button2, button3), each using a various number of arguments. My aim is to create a general push button 'general_button' which will act as if the user presses on multiple buttons (e.g. pressing on general_button = pressing on button2 and button3). However, I do not know how to deal with the button handles so that I do not have to pass every arguments that button2 and button3 would need as argument of the callback for general_button. I hope the following example will explain the problem itself.
Lets imagine that the the buttons are created that way:
uicontrol(fh_gui,...
'Position',Positionbutton2,...
'String','button2',...
'Callback',{@button_callback, arg1_but2, arg2_but2});
uicontrol(fh_gui,...
'Position',Positionbutton3,...
'String','button3',...
'Callback',{@button_callback, arg1_but3, arg2_but3, arg3_but3});
The general button would be:
uicontrol(fh_gui,...
'Position',Positionbuttongeneral,...
'String','button general',...
'Callback',{@button_callback, ...
arg1_but2, arg2_but2...
arg1_but3, arg2_but3, arg3_but3});
All the arguments of button2 and 3 are passed so that the callback of each button can be called with the correct arguments. Do they exist in the handle so that I simply have to pass the handles (one per button) instead of all the arguments ? Or more simply, is there a way to 'push' a button without the user pressing on it?
Thank you very much for your answers, Gaelle
1 个评论
Jan
2013-7-19
Do the three button use the same callback button_callback with a different number of inputs?
采纳的回答
更多回答(1 个)
Jan
2013-7-19
A magic pressing of the button is possible by using the Java Robot, see e.g.<http://www.mathworks.com/matlabcentral/fileexchange/28357-jmouseemu-mouse-emulator-v2-2> .
But it would be cleaner to call the function directly and collect the inputs explicitly:
handles.button2 = uicontrol(fh_gui,...
'Position',Positionbutton2,...
'String','button2',...
'Callback',{@button_callback, arg1_but2, arg2_but2});
handles.button3 = uicontrol(fh_gui,...
'Position',Positionbutton3,...
'String','button3',...
'Callback',{@button_callback, arg1_but3, arg2_but3, arg3_but3});
handles.buttonGeneral = uicontrol(fh_gui,...
'Position',Positionbuttongeneral,...
'String','button general',...
'Callback',@button_callback_General);
guidata(fh_gui, handles);
function button_callback_General(ObjectH, EventData)
handles = guidata(ObjectH);
cb2 = get(handles.button2, 'Callback');
cb3 = get(handles.button3, 'Callback');
args = cat(2, cb2(2:end), cb3(2:end))
button_callback(ObjectH, EventData, args{:});
Now changes in the callbacks of Button2 and Button3 are automatically considered, when the "general" Button is activated.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Migrate GUIDE Apps 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!