Я думал установить одну функцию для нескольких кнопок. Все они делают одно и то же, но имеют разное определяющее значение. Это сделано для того, чтобы при нажатии одной кнопки она не путалась с другой кнопкой той же функции.
Одна функция для нескольких кнопок в Matlab
Ответы (2)
См. документацию по обратным вызовам. Обратные вызовы по умолчанию принимают два входных аргумента: дескриптор объекта, вызвавшего функцию, и структуру данных события от объекта, которая может быть или не быть пустой. Вы можете использовать свойства String
или Tag
вашей кнопки для управления поведением вашего графического интерфейса в зависимости от того, какая кнопка нажата, с помощью одной функции обратного вызова. Рассмотрим следующий пример:
function testGUI
handles.mainwindow = figure();
handles.mytextbox = uicontrol( ...
'Style', 'edit', ...
'Units', 'normalized', ...
'Position', [0.15 0.80 .70 .10], ...
'String', 'No Button Has Been Pressed' ...
);
handles.button(1) = uicontrol( ...
'Style', 'pushbutton', ...
'Units', 'normalized', ...
'Position', [0.05 0.05 .30 .70], ...
'String', 'Button1', ...
'Callback', {@mybuttonpress,handles} ...
);
handles.button(2) = uicontrol( ...
'Style', 'pushbutton', ...
'Units', 'normalized', ...
'Position', [0.35 0.05 .30 .70], ...
'String', 'Button2', ...
'Callback', {@mybuttonpress,handles} ...
);
handles.button(3) = uicontrol( ...
'Style', 'pushbutton', ...
'Units', 'normalized', ...
'Position', [0.65 0.05 .30 .70], ...
'String', 'Button3', ...
'Callback', {@mybuttonpress,handles} ...
);
end
function mybuttonpress(src, ~, handles)
switch src.String
case 'Button1'
handles.mytextbox.String = 'Button 1 Has Been Pressed';
case 'Button2'
handles.mytextbox.String = 'Button 2 Has Been Pressed';
case 'Button3'
handles.mytextbox.String = 'Button 3 Has Been Pressed';
otherwise
% Something strange happened
end
end
Обратите внимание, что для этого требуется MATLAB R2014b или новее, чтобы использовать запись через точку для доступа к свойствам объекта. См. эту запись в блоге для получения дополнительной информации.
person
excaza
schedule
07.07.2015
Извините за поздний ответ, но это отличная идея, но что, если бы я бесконечно создавал кнопку и хотел, чтобы она работала с этим. Так, например, есть только одна кнопка и еще одна кнопка для создания той же кнопки, что и эта кнопка. Я просто решил создать 50 таких кнопок, и я по-прежнему хочу, чтобы они имели ту же функциональность, что и этот код, но без хлопот с созданием 50 случаев, как мне это сделать? Потому что моя идея заключалась в использовании
sprintf('Button_%s',[value on tag or string]);
- person Tamfor Dulin; 14.07.2015
@TamforDulin Я не уверен, что понимаю. Я бы предложил задать новый вопрос с некоторыми дополнительными деталями.
- person excaza; 14.07.2015
Мне жаль. Но я создал функцию, которая создает любое количество кнопок, которое пожелает пользователь. Таким образом, у него будет функция, аналогичная тому, что вы создали. Но вместо фактического ограничения количества кнопок до 3. Любое количество кнопок будет связано с одной функцией. Но все кнопки делают одно и то же, но немного по-разному в зависимости от нажатой кнопки.
- person Tamfor Dulin; 14.07.2015
Вы можете просто определить общую функцию и вызвать ее из всех ваших обратных вызовов кнопок.
person
Shikhar Sharma
schedule
07.07.2015
Просто написать функцию не очень полезный ответ.
- person excaza; 07.07.2015
pushbutton
был нажат? - person Hoki   schedule 07.07.2015