私はGUIに取り組んでいます。ハンドル構造で作成された余分なフィールドにデータを格納したい。しかし、コールバック関数が終了したときにハンドルの構造を正しく更新する方法がわかりません。アドバイスをお願いします。信号のMatlab GUI:ハンドル構造を更新するには?
私の単純化されたプログラム
- セット番号(1-10)。各信号には3つのパラメータがあります。
- ハンドル構造で作成された配列から選択した信号のパラメータを読み込みます。 (デフォルトはゼロ)。
- パラメータを編集して、配列を更新します。
GUI
function simple_gui(hObject, h)
h.fig = figure(...
'Units','pix',...
'Position',[50 50 500 400],...
'Visible','default',...
'Name','GUI',...
'NumberTitle','off',...
'Resize','on');
table = {'1' , '2', '3' , '4', '5', '6', '7', '8', '9', '10' };
h.number = uicontrol(...
'Units','characters',...
'Max',10,...
'Min',1,...
'String',table,...
'Style','popupmenu',...
'Value',1,...
'Position',[37.4 28.3846153846154 19.4 1.61538461538462],...
'BackgroundColor',[1 1 1]);
h.edit1 = uicontrol(...
'Units','pix',...
'String','0',...
'Style','edit',...
'Position',[180 280 50 20],...
'BackgroundColor',[1 1 1],...
'FontSize',10);
h.edit2 = uicontrol(...
'Units','pix',...
'String','0',...
'Style','edit',...
'Position',[180 255 50 20],...
'Children',[],...
'FontSize',10);
h.edit3 = uicontrol(...
'Units','pix',...
'String','0',...
'Style','edit',...
'Position',[180 230 50 20],...
'FontSize',10);
メインコード:への更新を確実にする
コールguidata(handleObject, varToStore)
(documentation)GUIコールバック関数の末尾:要約
h.parameter1 = zeros(1,10);
h.parameter2 = zeros(1,10);
h.parameter3 = zeros(1,10);
h.signal_no = 0;
h.number.Callback = {@number_Callback, h};
h.edit1.Callback = {@parameter_change_Callback, h};
h.edit2.Callback = {@parameter_change_Callback, h};
h.edit3.Callback = {@parameter_change_Callback, h};
guidata(h.fig, h);
function number_Callback(hObject,eventdata, h)
h = guidata(hObject);
h.signal_no = hObject.Value;
k = h.signal_no;
h.edit1.String = h.parameter1(k);
h.edit2.String = h.parameter2(k);
h.edit3.String = h.parameter3(k);
guidata(hObject,h);
function parameter_change_Callback(hObject,eventdata, h)
h = guidata(hObject);
k = h.signal_no;
h.parameter1(k) = str2double(h.edit1.String);
h.parameter2(k) = str2double(h.edit2.String);
h.parameter3(k) = str2double(h.edit3.String);
guidata(hObject, h);
あなたは '関数guidataを追加する必要が簡略化されたコールバック宣言でhObjectはです、h); 'あなたの関数の最後に。 'function simple_gui(hObject、h)' – Anthony
@Anthony、あなたが言ったコマンドを追加しましたが、それは助けになりませんでした。 「存在しないフィールド 'parameter1'への参照」というエラーが表示されます。しかし、私はGUIDEを使って同様のプログラムを書いてもうまく動作します。しかし、私はプログラマティックなコードを書くことを好むし、それを働かせる方法を学びたい。 –
申し訳ありませんが、私の提案はひどく間違っていました。私はあなたのコードを誤解しました。私はあなたのコードをまだチェックしていません。もしまだ答えがなければ、 – Anthony