2012-02-14 6 views
2

私は、プログラマティックなアプローチで作成したMatlabのGUIを持っています。それは6つのスライダーを持っていて、私はそれらの1つを動かすことができるようにしたいと思います。私はset()関数を使う必要があると思います。すでにmatlabでこれを行ういくつかの関数はありますか?私は周りを見回している。適切な方向で私を指すための提案や何か?スライダを移動し、他のすべてのスライダをMatlabで更新しますか?

答えて

1

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

プロパティをValueに設定します。あなたはprogrammaticalyそれを使用している場合は

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 
+0

。 –

+0

私はこのアプローチがどのように機能するかを見ていますが、重複したコードがたくさん残ってしまうことはありませんか? –

+0

私は、渡されたデータですべてのスライダを更新する関数を思いつきました。 –

関連する問題