2017-03-28 9 views
0

私は簡単なMATLAB GUIコードを持っており、添付されています。ボタンを押すと機能が実行されます。私は二度このボタンを押すとMATLAB GUI - ボタン戻るエラーを返します

はしかし、それはタイプ「構造体」の入力引数のエラー

未定義関数「GUI」を投げています。 @で

エラー(hObjectは、eventdataの)GUI( 'pushbutton1_Callback'、hObjectは、eventdataの、guidataを(hObjectは))

エラーコールバックするuicontrol評価しながら

% --- Executes on button press in pushbutton1. 
function pushbutton1_Callback(hObject, eventdata, handles) 
% hObject handle to pushbutton1 (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
set(handles.pushbutton1, 'enable','off'); 
output = randomFunction(); 
    a = 1 

while(1) 
    a = a+1 
    if a == 4 
     break; 
    end 

end 
set(handles.pushbutton1, 'enable','on'); 
+0

は '現在の作業ディレクトリを変更randomFunction'ない場合でも、バックに変更されることを保証するために、これを行うためにonCleanupを使用することをお勧めしますか? – Suever

+0

いいですよね。でも、将来はスタンドアローンのGUIとしてこれを作ろうと計画しています。ランダム関数です。イメージ上で動作するため、実際にディレクトリを選択するようユーザーに求めます。 –

答えて

1

問題はそのrandomFunctionです現在の作業ディレクトリを変更するか、PATHを変更してGUI機能(GUI.m)がパス上になくなり、もう一度ボタンをクリックしたときに見つかるようにする必要があります。

あなたは、この動作を停止したい場合は、2つのオプションがあり

  1. オプションがrandomFunctionこの変更を行うないにを変更することであろう望ましいです。関数は常に呼び出される前の状態にユーザーの環境を置く必要があります。 cdを使用しないようにですが、あなたは簡単にrandomFunctionrandomFunction

    function randomFunction() 
        folder = pwd; 
        cleanup = onCleanup(@()cd(folder)); 
    
        % Normal contents of randomFunction 
    end 
    

    他のオプションの中にonCleanupを使用してこれを行うことができます。これがベストプラクティスです。あなたはrandomFunctionを変更することができない場合は関数を呼び出す前に、あなたは、現在のディレクトリが何であったかを覚えておくことは、あなたのコールバックを変更することができ、ファイル

    filename = fullfile(folder, 'image.png'); 
    imread(filename) 
    
  2. にアクセスするには代わりに、完全なファイルパスを使用して、randomFunction完了後に戻ってそれを変更することができます。私は実際にディレクトリがrandomFunctionエラーアウト

    function pushbutton1_Callback(hObject, eventdata, handles) 
        set(handles.pushbutton1, 'enable', 'off'); 
    
        % Make sure that when this function ends we change back to the current folder 
        folder = pwd; 
        cleanup = onCleanup(@()cd(folder)); 
    
        output = randomFunction(); 
        a = 1 
    
        while(1) 
         a = a+1 
         if a == 4 
          break; 
         end 
    
        end 
        set(handles.pushbutton1, 'enable','on'); 
    
+0

ランダム関数はフォルダを選択します。フォルダには画像セットがあり、画像処理が行われます。このフォルダが選択されると、このフォルダ内のmatlab関数も読み込まれます。このGUIをスタンドアロンにするにはどうすればよいですか? –

+0

@JeshKundem完全なファイルパスの使い方についての私の更新を見てください。 – Suever

関連する問題