3

ガイドを使用して、4 つのラジオ ボタンと 1 つのプッシュ ボタンを含むボタン グループを作成しました。

ラジオボタンごとに 1 つずつ、合計 4 つの関数があります。

  1. それぞれのラジオボタンからこれらの機能を呼び出すにはどうすればよいですか。
  2. プッシュ ボタンが押されると、アクティブなラジオ ボタンに関連付けられた関数が実行されます。
4

2 に答える 2

6

ボタン グループ コールバックのソリューション: SelectionChangeFCN

uipanelのSelection Changeコールバック プロパティを使用します (ボタン グループを右クリックし、[コールバックの表示] -> [SelectionChangeFcn]を選択します) 。eventdata引数には、現在および以前に選択されたラジオボタンへのハンドルが含まれます。eventdata引数は、次のフィールドを持つ構造体です。

  • イベント名
  • 古い値
  • 新しい値

そのため、 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

また、 Handle Graphicsとグラフィカル ユーザー インターフェイスの構築の詳細については、MATLAB のドキュメントも参照してください。

于 2010-04-12T20:50:03.417 に答える
2

GUI の開始に関する短期集中コース...今:

を使用している場合guide、Figure mygui.fig を保存すると、M ファイルは mygui.m として自動的に生成されます。mygui.m を開き、ラジオ ボタンのコールバック関数の下にコードを入力します。プログラムの開始時に初期化する変数は、開始関数の下で定義する必要があります。コマンド guidata(hObject,handles) を使用して、各コールバックの最後にハンドル構造を更新してください。

たとえば、相互に排他的な 2 つのラジオ ボタンが必要な場合 (一方を選択すると他方が選択解除され、一方を選択解除すると他方が選択される)、それらのコールバックの下に次のコードを入力します。

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);

そして、オープニング機能の下で選択されるラジオボタン1を初期化します。

set(handles.radiobutton1,'Value',1)
set(handles.radiobutton2,'Value',0)
于 2010-04-12T20:49:51.050 に答える