0

ウェイトバーを更新するフォールバック機能を GUI に実装しようとしています。画像をロードする関数に関数ハンドルを渡します。フォールバック自体は機能しますが、ウェイトバーへのハンドルを取得できません。

function z_WaitBarUpdate(value, maxValue)
handles=guidata(handles.output); % <-- fails because handles is unknown
if ishandle(handles.waitbar.handle)
    waitbar(value/maxValue,handles.waitbar.handle,handles.waitbar.text);
end

このコードでハンドルを使用して関数を呼び出します

hWait = waitbar(0,'1','Name','Reading calibration file ...');
cleanupWaitbar = onCleanup( @()( delete( hWait )));       
handles.waitbar.handle = hWait;
handles.waitbar.text = 'reading subset of stack ...';
readCalibrationImage( handles , @z_WaitBarUpdate);

私のコールバックでウェイトバーハンドルにアクセスする方法はありますか?

4

1 に答える 1

1

私は通常、あなたが使用している機能のほとんどを使用しません。私は Matlab GUI の専門家ではありません。でも、これならいけると思います。

  1. 変化する

    function z_WaitBarUpdate(value, maxValue) 
    

    function z_WaitBarUpdate(value, maxValue, handles)
    
  2. 変化する

    readCalibrationImage( handles , @z_WaitBarUpdate); 
    

    readCalibrationImage( handles , @(value, maxValue) z_WaitBarUpdate(value, maxValue, handles));
    

まず、これは更新関数への 3 番目の入力を定義し、欠落している入力を処理します。が渡されない場合handles、関数で使用できません。次に、handles構造体が作成された後、関数が実際に呼び出されたときに最初の 2 つの入力を後で定義できるようにしながら、3 番目の入力を定義する目的で無名関数を作成します。

于 2013-01-10T16:05:54.293 に答える