2

プログラムによるアプローチを使用して作成した Matlab の GUI があります。6 つのスライダーがあり、そのうちの 1 つを動かして、もう一度クリックしたかのように他のスライダーを更新できるようにしたいのですが、同じ場所にとどまります。set() 関数を使用する必要があると思います。matlab でこれを行う関数は既にありますか? 私は周りを見回してきました。私を正しい方向に向けるための提案や何かはありますか?

4

1 に答える 1

1

を使用している場合は、各コールバックで使用可能な変数guideから他のスライダーにアクセスできます。handles

Valueそれらのプロパティを設定します。

   function Slider1_CallBack(hObj,evt,handles)
       set(handles.Slider1,'Value',10);
       set(handles.Slider2,'Value',10);
      % etc..
   end

プログラムで使用している場合は、handles手動で保存できます。

   function main
        handles.Figure1 = figure(..);
        handles.Slider1 = uicontrol(...);
        handles.Slider2 = uicontrol(...);
        guidata(handles.Figure1,handles);
   end

スライダーのコールバックは次のようになります。

   function Slider1_CallBack(hObj,evt)
       handles = guidata(hObj);
       set(handles.Slider1,'Value',10);
       set(handles.Slider2,'Value',10);
      % etc..
   end

編集UI を作成する際の良い方法は、GUI ロジックを実際のデータから分離することです。常にデータを変更し、updateGUIルーチンを呼び出します。

したがって、次のようにプログラムを書くことができます。

   function main
        handles.gui.Figure1 = figure(..);
        handles.gui.Slider1 = uicontrol(...);
        handles.gui.Slider2 = uicontrol(...);

        handles.data.x = 1;
        guidata(handles.Figure1,handles);
   end

   function UpdateGui(handles)
        %Based on the data, update the GUI
        set(handles.Slider1,'Value',handles.data.x);
        set(handles.Slider2,'Value',handles.data.x+1);
   end 

コールバックは次のようになります。

   function Slider1_CallBack(hObj,evt)
       handles = guidata(hObj);
       handles.data.x = handles.data.x  + 1;
       UpdateGui(handles);
       guidata(hObj,handles);
      % etc..
   end
于 2012-02-14T23:14:38.337 に答える