Кнопка графического интерфейса Matlab, которая переключает другую кнопку

Есть ли способ создать две кнопки переключения в графическом интерфейсе Matlab, чтобы одна переключала другую? Другими словами, если кнопка A включена, как я могу создать кнопку B, которая при включении отключает A?


person maupertius    schedule 15.11.2012    source источник


Ответы (2)


У меня версия R2009a, поэтому я не знаю, работает ли это для вас или нет:

Я определил две кнопки с помощью guide (с именами по умолчанию). При первом щелчке он отключается (Enable: Off), его значение устанавливается равным 1, а строка — включенным; вторая кнопка установлена ​​в другое состояние. Аналогичное поведение дано другой кнопке.

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
set(handles.pushbutton1,'Value',1,'String','On','Enable','Off')
set(handles.pushbutton2,'Value',0,'String','Off','Enable','On')
get(handles.pushbutton1)

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
set(handles.pushbutton1,'Value',0,'String','Off','Enable','On')
set(handles.pushbutton2,'Value',1,'String','On','Enable','Off')



Если вы хотите переключить поведение кнопки 2 в зависимости от состояния кнопки 1, выполните следующие действия:

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)

% this toggles button1 between 0 and 1 and its label between 'On' and 'Off'
p = 1-get(handles.pushbutton1,'Value');   
set(handles.pushbutton1,'Value',p)
if p==0
    set(handles.pushbutton1,'String','Off')
else
    set(handles.pushbutton1,'String','On')
end



% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)

% Behavior of button2 is dependent on state of button1
p = get(handles.pushbutton1,'Value');

if p==0
    % Do this when button1 has its label to 'Off' (and Value to 0)
else
    % This will execute when button1 has a Value of 1 (and its label showing 'On')
end

Это то, что тебе надо?

person R. Schifini    schedule 15.11.2012
comment
Это работает, спасибо. Однако в моем случае у меня есть команда (в частности, удаление видеообъекта), когда я переключаю кнопку 1 в положение OFF. Если я использую ваш код, нажатие кнопки 2 просто отключает кнопку 1 без выполнения команды удаления видеообъекта. Любое предложение? - person maupertius; 15.11.2012
comment
«Выкл.» и «Вкл.» в моем коде — это просто метки, вы можете изменить их на все, что захотите. Я не знаю вашей команды удаления видео, но если вы хотите, чтобы это действие происходило при нажатии кнопки 2, поместите команду сразу после последней строки. - person R. Schifini; 15.11.2012
comment
Мм не совсем. Я только что понял, что не думаю, что то, что я хочу, возможно сделать. В идеале я хотел бы выполнить часть кода, который находится в кнопке 1, ДО того, как будет выполнен код кнопки 2, даже если я нажал кнопку 2. - person maupertius; 16.11.2012
comment
Поскольку вы нажимаете кнопку 2, вы можете скопировать код из кнопки 1 в кнопку 2 и выполнить его только в том случае, если состояние кнопки 1 находится в определенном состоянии (внутри if..end), а затем выполнить код кнопки 2. Но весь этот код должен быть внутри кнопки2. - person R. Schifini; 16.11.2012
comment
Я хотел этого избежать, но, видимо, это единственное решение. Большое спасибо за Вашу помощь! - person maupertius; 19.11.2012

Это мой код:

function button1_Callback(hObject, eventdata, handles)
if get(hObject,'Value')==1

    %do something here

else

    %do something else (in my case delete a video object)

Если я сейчас поставлю вторую кнопку и воспользуюсь командой

set(handles.button1,'Value',0)

В результате моя первая кнопка переключается, но команда после else не выполняется. Есть ли способ выполнить эту команду?

person maupertius    schedule 15.11.2012