【问题标题】:Matlab GUI button that toggles another button切换另一个按钮的 Matlab GUI 按钮
【发布时间】:2012-11-04 08:24:39
【问题描述】:

有没有办法在 Matlab GUI 中创建两个切换按钮,以便一个切换另一个?换句话说,如果按钮 A 处于打开状态,我如何创建一个按钮 B,该按钮 B 在打开时会使 A 关闭?

【问题讨论】:

    标签: matlab user-interface button toggle matlab-guide


    【解决方案1】:

    这是我的代码:

    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 之后的命令没有执行。 有没有办法执行该命令?

    【讨论】:

      【解决方案2】:

      我有版本 R2009a,所以我不知道这是否适合你:

      我用guide(默认名称)定义了两个按钮。单击第一个时,它被禁用(启用:关闭),其值设置为 1,其字符串设置为 On;第二个按钮被设置为另一个状态。另一个按钮也有类似的行为。

      % --- 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')
      



      如果您想根据 button1 的状态切换 button2 的行为,请执行以下操作:

      % --- 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
      

      这是你需要的吗?

      【讨论】:

      • 这样就行了,谢谢。但是,在我的情况下,当我将按钮 1 切换为关闭时,我有一个命令(特别是删除视频对象)。如果我使用您的代码,按下按钮 2 只需将按钮 1 切换为关闭,而不执行删除视频对象命令。有什么建议吗?
      • 我的代码上的“关闭”和“打开”只是标签,您可以将它们更改为您想要的任何内容。我不知道您的删除视频命令,但如果您想在按下按钮 2 时执行该操作,请将命令放在最后一行之后。
      • 嗯不是真的。我只是意识到我不认为我想要的事情是可能的。理想情况下,我想在执行按钮 2 的代码之前执行按钮 1 中的部分代码,即使我按下了按钮 2。
      • 由于你按下的是button2,你可以将button1中的代码复制到button2中,并且只有在button1状态处于某种状态(在if..end内)时才执行它,然后执行其中的代码按钮 2。但是所有这些代码都应该在 button2 中。
      • 我想避免这种情况,但显然这是唯一的解决方案。非常感谢您的帮助!
      猜你喜欢
      • 2020-08-24
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 2021-12-18
      • 2013-12-31
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      相关资源
      最近更新 更多