Как передать функцию переключателю в группе кнопок, созданной с помощью руководства в MATLAB? - PullRequest
3 голосов
/ 12 апреля 2010

Я создал группу кнопок с четырьмя переключателями и кнопкой, используя руководство.

Существует четыре функции, по одной для каждого переключателя, написанного отдельно.

  1. Как вызывать эти функции с соответствующих переключателей.
  2. При нажатии кнопки должна выполняться функция, связанная с активной радиокнопкой.

Ответы [ 2 ]

6 голосов
/ 13 апреля 2010

Решение для обратного вызова группы кнопок: SelectionChangeFCN

Используйте свойство обратного вызова Selection Change (щелкните правой кнопкой мыши группу кнопок и выберите Просмотр обратных вызовов-> SelectionChangeFcn ) из uipanel . Аргумент eventdata содержит дескрипторы текущей и ранее выбранной радиокнопки. Аргумент eventdata представляет собой структуру со следующими полями:

  • EventName
  • OldValue
  • NewValue

Итак, в зависимости от значения eventdata.NewValue ; например

function uipanel1_SelectionChangeFcn(hObject,eventdata,handles)
...
newButton=get(eventdata.NewValue,'tag');
switch newButton
     case 'radiobutton1'
         % code for radiobutton 1 here
     case 'radiobutton2'
         % code for radiobutton 2 here
     ...
end
...

Решение для обратного вызова кнопки

Обратный вызов для вашей кнопки может иметь что-то вроде

function button1_Callback(hObject,eventdata,handles)
h_selectedRadioButton = get(handles.uipanel1,'SelectedObject');
selectedRadioTag = get(h_selectedRadioButton,'tag')
switch selectedRadioTag
   case 'radiobutton1'

   case 'radiobutton2'
   ...
end

Я также отсылаю вас к документации MATLAB для получения дополнительной информации о Обработка графики и построение графических пользовательских интерфейсов .

2 голосов
/ 13 апреля 2010

Ускоренный курс по запуску графического интерфейса ... сейчас:

Если вы используете guide, то при сохранении фигуры mygui.fig M-файл должен автоматически генерироваться как mygui.m. Откройте mygui.m и введите свой код под функцией обратного вызова переключателя. Любые переменные, которые вы хотите инициализировать при запуске программы, должны быть определены в функции открытия. Убедитесь, что вы обновляете структуру дескрипторов в конце каждого обратного вызова с помощью команды guidata (hObject, handles).

Например, если вам нужны две взаимоисключающие радиокнопки (когда вы выбираете одну, другая отменяет выбор или когда отменяется выбор другой, выбирается другая), введите следующий код под их обратными вызовами:

function radiobutton1_Callback(hObject, eventdata, handles)
if get(handles.hObject,'Value')
    set(handles.radiobutton2,'Value',0)
else
    set(handles.radiobutton2,'Value',1)
end
guidata(hObject,handles);

и

function radiobutton2_Callback(hObject, eventdata, handles)
if get(hObject,'Value')
    set(handles.radiobutton1,'Value',0)
else
    set(handles.radiobutton1,'Value',1)
end
guidata(hObject,handles);

И инициализируйте переключатель один, который будет выбран под функцией открытия:

set(handles.radiobutton1,'Value',1)
set(handles.radiobutton2,'Value',0)
...