2013-01-15 37 views
1

我使用GUIDE創建了GUI。我在一個組中有3個單選按鈕。當我運行程序時,在輸入值進行一些計算後,我得到了壓力,溫度,升力/阻力的曲線圖(取決於我推動哪個單選按鈕)。程序結構如下:在另一個功能中使用選定的單選按鈕

主代碼(GUI): 在按下「計算」按鈕後,將值傳遞給名爲Apollo的函數。

阿波羅密碼: 包含用於計算壓力,溫度和升力/阻力的必要值的子函數。最後的子功能稱爲plot_data。此功能將航天器的形狀繪製在一個圖中,並在選擇相應的單選按鈕時繪製另一個圖中的壓力,溫度,升力/阻力。

問題 - 我是編程GUI的新手。我在解決如何確定從GUI中選擇哪個單選按鈕並在plot_data函數中使用某種邏輯作爲開關時遇到問題。我希望選擇案例在plot_data函數中。

任何幫助,將不勝感激。

回答

0

比方說,你的單選按鈕手柄rb1rb2和它們存儲在handles結構。然後,您可以使用'Value'屬性檢查它們是否被選中。

function apollo(hObj, eventdata, handles) 
    if get(handles.hrb1, 'Value') 
     % do stuff 
    elseif get(handles.hrb2, 'Value') 
     % do other stuff 
    end 
end 

更新:迴應OP的評論關於SelectionChangeFcn

如果你沒有大量的數據,你可以在開始繪製所有這些,然後更改的的Visible性質地塊。

function cbSelectionChange(hObj, eventdata, handles) 
    rbTag = get(eventData.NewValue, 'Tag'); 
    switch rbTag 
     case 'rb1' 
      set(handles.plotHandle1, 'Visible', 'On'); 
      set(handles.plotHandle2, 'Visible', 'Off'); 
     case 'rb2' 
      set(handles.plotHandle2, 'Visible', 'On'); 
      set(handles.plotHandle1, 'Visible', 'Off'); 
    end 
end 

如果你有大量的數據可以從SelectionChangeFcn調用回調函數plot_data。

function cbSelectionChange(hObj, eventdata, handles) 
    rbTag = get(eventData.NewValue, 'Tag'); 
    switch rbTag 
     case 'rb1' 
      plot_data(yourArguments1); 
     case 'rb2' 
      plot_data(yourArguments2); 
    end 
end 

除非您修改數據,否則您的代碼的性能不會受到傳遞數據的影響。道格·赫爾說here

MATLAB使用通常被稱爲「寫入時複製」,以避免使工作區的功能在裏面輸入參數的 副本,直到或者 除非修改輸入參數系統。如果你不修改輸入參數,MATLAB將避免複製。

+0

非常感謝HebeleHododo,這很好。但是現在運行該程序後,我意識到我沒有正確設置它。我現在需要做的是改變代碼,以便每當我點擊一個單選按鈕時,它將改變爲合適的情節,而不是我一直點擊計算按鈕。我知道這可能會涉及到對radiobutton組使用SelectionChangeFnc回調。我真的不想通過Apollo.m將來自plot_data.m的數據集傳遞到主GUI中。有沒有辦法只繪製所有的圖,然後從主GUI上打開或關閉它們? – roldy

+0

@roldy我更新了我的答案。我猜想改變'可見'屬性是你想要的。 – HebeleHododo

0
  • 如果你想要做的用戶點擊後的東西上一個單選按鈕,你應該修改「回調」你對象的屬性。

  • 如果你想從代碼中測試單選按鈕的狀態,你應該檢查「Value」屬性。這將是一個選定的按鈕,否則爲零。

  • 期待通過this教程

相關問題