1

guidata をテストする簡単なテスト関数を作成しましたが、but3c を使用するたびに、「入力引数が不足しています」というエラーが発生し続けます。

これを手伝ってくれる人はいますか?

function test
clear
clc
figure();
but1 = uicontrol('units','normalized','position',[0.2,0.2,0.2,0.2],...
                 'callback',@but1cb);
but2 = uicontrol('units','normalized','position',[0.6,0.6,0.2,0.2],...
                 'callback',@but2cb);
but3 = uicontrol('units','normalized','position',[0.4,0.4,0.2,0.2],...
                 'callback',@but3cb,'string',' ');
    function but1cb(hObject,~,handles)
        a = 1;
        handles.a = 1;
        guidata(hObject, handles)
    end
    function but2cb(hObject,~,handles)
        a = 2;
        handles.a = 2; 
        guidata(hObject, handles)
    end
    function but3cb(hObject,~,handles)
        a = handles.a
        print(a);
    end
end
4

1 に答える 1

2

最も簡単な修正は、最初に hObject から guidata を取得することです

function test
   figure();
   but1 = uicontrol('units','normalized','position',[0.2,0.2,0.2,0.2],...
             'callback',@but1cb);
   but2 = uicontrol('units','normalized','position',[0.6,0.6,0.2,0.2],...
             'callback',@but2cb);
   but3 = uicontrol('units','normalized','position',[0.4,0.4,0.2,0.2],...
             'callback',@but3cb,'string',' ');
       function but1cb(hObject,~)        
           a = 1;
           handles = guidata(hObject);
           handles.a = 1;
           guidata(hObject, handles)
       end
       function but2cb(hObject,~)
           handles = guidata(hObject);
           a = 2;
           handles.a = 2; 
           guidata(hObject, handles)
       end
       function but3cb(hObject,~)
           handles = guidata(hObject);
           a = handles.a
           print(a);
       end
   end
于 2013-06-07T04:06:55.583 に答える