2

私は masir と SetOut という名前の 2 つの GUI を持っています
SetOut GUI は masir のサブ GUI です (masir のボタンを押すと SetOut が開きます)

masirGUIhandle = masir;  
masirGUIdata = guidata(masirGUIhandle);  

しかし、これらの 2 行を実行すると、SetOut で作業しているときに masir の開始関数が実行されます (開始関数では、変数の初期値を設定しましたが、これらの初期値は必要ありません。変数の値を変更する必要があります)。 masir GUI の OpeningFcn を実行したくありません。SetOut で masir データにアクセスする必要があるだけです。問題を解決するにはどうすればよいですか?

この答えについて私を助けて、もっと説明してくれる人はいますか?

I use this easy way for data sharing between GUIs
%In the end of OpeningFcn of Main GUI
setappdata(0,'HandleMainGUI',hObject);
%When you want to edit shared data you must get the handle
HandleMainGUI=getappdata(0,'HandleMainGUI');
%write a local variable called MyData to SharedData, any type of data
setappdata(HandleMainGUI,'SharedData',MyData); 
%get SharedData and save it to a local variable called SomeDataShared
SomeDataShared=getappdata(HandleMainGUI,'SharedData'); 
Don't forget to clean up the data shared in the CloseReqFcn of you main GUI
HandleMainGUI=getappdata(0,'HandleMainGUI');
rmappdata(HandleMainGUI,'MySharedData') %do rmappdata for all data shared 
Remember that your GUIs might try to getappdata that doesn't exist, you should    first     test if it does exist
if (isappdata(0,'HandleMainGUI') & isappdata(HandleMainGUI,'MySharedData'))
%get, set or rm appdata
else
%do something else, maybe loading default values into those variables
end  

MainGUI で記述すべきコード行と、SubGUI で記述すべきコード行について詳しく教えてください。
レスポンサが CloseReqFcn で何を意味するのか教えてください。

4

1 に答える 1

2

さて、私が問題をどのように見ているかを要約しましょう。

データを作成せずに読み取りたいSetOutですか? ウィンドウの作成時にデータが作成されるため、このようなことはできません。

うまく体系的な方法は、オブジェクト指向を行うことです(Model-View Controller Patternを参照)ここで私の回答から例を多かれ少なかれコピーできます(イベントの例 - オブザーバー)


しかし、あなたのコードに固執したい場合は、いくつかのアイデアもあります:

  • ウィンドウを表示したくない場合は、非表示に設定できますset(theGUIhandle,'Visible','off')

  • ウィンドウが閉じていない間は、次のコマンドでデータを取得できますgetappdata(theGUIhandle)

  • ウィンドウが閉じられた後にデータが必要な場合は、ウィンドウの外にデータを保存する関数が必要です。

于 2012-04-10T12:11:02.970 に答える