1

GUIDEでGUIを作成しました。グループに3つのラジオボタンがあります。プログラムを実行し、いくつかの計算の値を入力した後、圧力、温度、揚力/抗力(どのラジオボタンを押すかによって異なります)のプロットが表示されます。プログラムの構成は次のとおりです。

メインコード(GUI):[計算]ボタンが押された後、Apolloという名前の関数に値を渡します。

アポロコード:圧力、温度、揚力/抗力の計算に必要な値を計算するためのサブ関数が含まれています。最後のサブ関数はplot_dataと呼ばれます。この関数は、宇宙船の形状を1つの図にプロットし、対応するラジオボタンを選択すると、圧力、温度、揚力/抗力を別の図にプロットします。

問題-私はGUIのプログラミングに不慣れです。GUIからどのラジオボタンが選択されているかを判断し、plot_data関数のスイッチとしてある種のロジックを使用する方法を理解するのに問題があります。selectケースをplot_data関数に入れたいと思います。

どんな助けでもいただければ幸いです。

4

2 に答える 2

0
  • ユーザーがラジオボタンをクリックした後に何かを実行したい場合は、オブジェクトの「コールバック」プロパティを編集する必要があります。

  • コードからラジオボタンの状態をテストする場合は、「値」プロパティを確認する必要があります。選択したボタンの場合は1、それ以外の場合は0になります。

  • このチュートリアルに目を通す

于 2013-01-15T12:34:08.383 に答える
0

rb1ラジオボタンのハンドルがとであり、それらが構造体rb2に格納されているとしましょう。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

コードを変更しない限り、データを渡すことによってコードのパフォーマンスが影響を受けることはありません。ダグハルはここに言います:

MATLABは、一般に「コピーオンライト」と呼ばれるシステムを使用して、入力引数を変更するまで、または変更しない限り、関数ワークスペース内に入力引数のコピーを作成しないようにします。input引数を変更しない場合、MATLABはコピーの作成を回避します。

于 2013-01-15T12:36:07.080 に答える