0

コードの先頭に設定されている42個の定数の状態に応じて、さまざまな方法で実行できる関数があります。これまで、さまざまな条件下で関数を実行したい場合は、MATLABコードを開き、コードの先頭で定数を調整するだけです。

42の定数は追跡することがたくさんあり、私は特定のスイッチを誤ってオンのままにして実験を実行していることに気づきました。明らかな解決策は、入力を1か所で視覚的に確認できるGUIを構築することです。GUIは、単純にパラメータ設定ウィンドウであり、下部に大きな「実行」ボタンがあり、入力(42個すべて!)を受け取り、それらをメイン関数に渡します。

素敵なGUIを構築するために使用したGUIDEに出くわしました。関数を起動するためのボタンを取得できましたが、実際の変数をテキストボックスに入力し、チェックボックスの状態をメイン関数に渡すのに苦労しています。

「コールバック」と関係があることは理解していますが、ドキュメントは不明確であり、変数が現在のウィンドウのコンテンツを調整するGUIの構築に関係しているようです。

基本的な例として、私はチェックボックスを使用しています。チェックボックスをクリックすると、関数checkbox1_Callback(hObject、eventdata、handles)が実行されることを知っています。この関数を変更して、変数'state'を返すようにしました。これは、関数中に次のように設定されます。

state = get(hObject,'Value')

これにより、チェックボックスをクリックするたびに、状態が変更されたことを示すメッセージがポップアップ表示されます。もちろん、これが発生するとすぐに、関数は終了し、変数は破棄されます。他の場所で変数を受け取る方法はないようです。.mコードには、checkbox1_Callback関数の呼び出しがどこにも含まれていないため、入力をどこで受け取ることができるかわかりません。

[実行]ボタンをクリックしたときにcheckbox1_Callback関数を呼び出すことができればと思っていましたが、コールバックに渡す引数がわかりません。

明らかに私はここで基本的な何かを見逃していますが、ドキュメントはこれを簡単にしません!任意のポインタをいただければ幸いです。

4

2 に答える 2

1

「GO」ボタンで、おそらく1つのコールバックだけが必要になります。

すでにこれを整理しているようです-したがって、おそらく次のような関数があります:

function go_Callback(hObject, eventdata, handles)

「実行」ボタンを押すと実行されます。お持ちでない場合は、GUIDEから「実行」ボタンを右クリックし、「コールバックの表示」->「コールバック」を選択して作成してください。

ここから、他のGUIコンポーネントからデータを「プル」できます。たとえば、「しきい値」というテキストボックスがある場合:

threshold = get(handles.threshold, 'String');

同様に、チェックボックスの場合:

checked = get(handles.my_checkbox, 'Value');
于 2012-09-11T10:39:35.050 に答える
0

GUIDEを使用していなかったので、すぐに質問に答えることはできません。ただし、通常のMATLAB関数で「手動で」スタート画面をプログラミングすることを検討します。次に、GUIを表示する関数内ですべてのUIコンポーネントを宣言できます。GOボタンのコールバックはローカル関数として宣言されているため、すべてのUIコントロールにアクセスできます。GOを押すと、uicontrolsの状態を取得し、関数を実行するだけです。

function setup_screen

init_figure = 1;
h_fig =   figure(...
    'BackingStore', 'on',...
    'DoubleBuffer','on',...
    'Render', 'zbuffer',...
    'Name', 'TecMod - Process Manager',...
    'NumberTitle','off',...
    'MenuBar','none',...
    'DockControls', 'off',...
    'Toolbar','none',...
    'units', 'characters',...
    'Position',[10 10 30 20],...
    'Units','characters');

hp_config = uipanel(...
    'Title','Setup',...
    'units', 'characters',...
    'Position',[1 1 28 18]);

hu_info = uicontrol('parent', hp_config, 'style','pushbutton',...
    'units','characters',  ...
    'TooltipString', 'Run the function',...
    'tag', 'hu_info',...
    'String', 'GO',...
    'Position', [1 1 25 3],...
    'Callback', @buttonCallback);

hu_choice = uicontrol('parent', hp_config, 'Style','checkbox',...
        'units', 'characters',...
        'Position',[1 10 25 3],...
        'String', 'Checkbox1',...
        'Value', 1);

    function buttonCallback(src,evt)
        if src==hu_info
            display('event from GO button');
            % get ui controls states
            display(['checkbox state ' num2str(get(hu_choice, 'Value'))]);
            % call your function with chosen parameters
        end
    end
end
于 2012-09-11T11:01:04.550 に答える