Matlab で UItable を作成し、さまざまな値とオプションを入力しました。次のようになります。
対応するコードは次のとおりです。
selector_1 = { 'A'; 'B' ; 'C' };
selector_2 = { 'A.1'; 'A.2'; 'A.3'; ...
'B.1'; 'B.2'; 'B.3'; ...
'C.1'; 'C.2'; 'C.3' };
rows = 5;
f = figure('name','Configuration of output','Position',[200 200 430 25+rows*20],'numbertitle','off','MenuBar','none');
dat = {'select outputfile...', 'select identifier...', 'Specifier', 'Index'};
dat = repmat(dat,rows,1);
columnname = {'Output file ',...
'Identifier ',...
'Specifier ', 'Index'};
columnformat = { {selector_1{:}}, {selector_2{:}}, 'char', 'numeric' };
columneditable = [true true true true];
t = uitable('Units','normalized','Position',...
[0 0 1 1], 'Data', dat,...
'ColumnName', columnname,...
'ColumnFormat', columnformat,...
'ColumnEditable', columneditable,...
'RowName',[]);
set(t, 'Data', dat,'celleditcallback','get(t,''Data'')');
コードを実行すると、Figure が開きます。したがって、基になるスクリプトは終了しました。テーブルを編集すると、uitable オブジェクトが変更され、終了後、次のようにして最終的な構成を取得できます。
finalconfig = get(t,'Data');
ただし、スクリプトは既に終了しているため、この行を手動で入力する必要があります。この行をスクリプトの最後に置くと、エラーが発生します。
そこで、次のループを使用して、テーブルを閉じたことを検出し、最後の構成を保存することを考えました
while ~isempty(findobj('name','Configuration of output'))
% some action
end
finalconfig = get(t,'Data');
set
そして、ループ、スクリプト全体、を含むコマンドだけ、その他のものをすべて入れようとしましたcelleditcallback
が、何も機能しませんでした。スクリプトがループ内でスタックするか、値を編集してもテーブルの表示が更新されません。drawnow
私も色々なポジションで挑戦しました。この状況をどのように処理しますか?最終結果を自動的に保存するにはどうすればよいですか? 「保存」ボタンを実装できるとは思わないため、「ウィンドウを閉じる」ことが検出するのに最適なアクションであると思います。も使用してGUIを作成しようとしましたGUIDE
が、完全に迷子になりました。なしで解決したいと考えています。
編集:「保存」ボタンを実装できるようになり、次のようにコールバックを試しました:
uimenu('Label','Save configuration','Callback',@saveConfig);
function saveConfig(~,~)
output = get(t,'Data',);
save([pwd 'output.mat'],'output');
end
CloseRequestFcn
また、Lucius Domitius Ahenobarbus の提案に従ってカスタムを実装しました。しかし、次のいずれかの問題があります。
1)
すべてをスクリプトとして定義し、すべて正常に動作しますが、(実際には私のお気に入り)のような関数を定義するか@saveConfig
、@my_Closefcn
ワークスペース内の一意の関数ファイルとして定義する必要があり、正しいパラメータを渡すのに苦労していますdat
実際には変更されますが、同じです。( mathworks サイトの例は機能しますが、追加のパラメーターは必要ありません。)
2)使用する場合
function configuration
% my script from above
end
私は実装@saveConfig
または@my_Closefcn
直接(ネスト)することができ、パラメーターの受け渡しはうまくいくと思います。しかし、テーブルの編集が機能しなくなり、次のエラーがスローされます。
handle.handle/get の使用中にエラーが発生しました
無効または削除されたオブジェクトです。
uitable CellEditCallback の評価中にエラーが発生しました
それを解決する方法は?ボタンを uitable に追加することさえできることがわかったので、本当に避けたいGUIDE
です。上記の私のコードは実行可能ですので、説明するのが難しいので、実際の問題が何であるかを確認していただければ幸いです。