0

GUIDE を使用して matlab GUI を作成しました。

内部に静的テキスト ボックスを含むいくつかのパネルを作成しました。「更新」ボタンを押したら、すべてのボックスに値を書き込みたいと思います。

たとえば、タグ AV1 のボックスに書き込みたいのですが、テキスト ボックスはパネル "uipanel2" 内にあります。

どちらの方法でもエラーが発生します。

set(handles.AV1,'String','hi'); 上記のコードは、フィールドが存在しないと言っているため機能しません。最初にパネルにアクセスする必要があるため、これは理にかなっています。

以下ではパネルにアクセスしますが、その子にアクセスするにはどうすればよいでしょうか?

set(handles.uipanel2.AV1,'String','hi');

このコードは次のエラーを返します:非構造体配列のフィールドを参照しようとしました。

4

1 に答える 1

3

Childrenはフィールドなので、子が必要な場合は試しget(handles.uipanel2,'Children')てみると、子へのハンドルを持つ配列が得られます。ハンドルが数字のuipanel2ように見えるのと同じように、あなたには数字のように見えます。

次に例を示します。

function testGUI
    fig = figure(1);
    panel = uipanel(fig);
    tbox = uicontrol('Style','text','String','hello','parent',panel);

    ch = get(panel,'Children')
    get(ch,'Type') 
    get(ch,'String')

end

次のようなものをコンソールに出力Childrenするパネル オブジェクトを取得する方法を示します。ch = get(panel,'Children')

ch =

  182.0011

そして、これが実際にはパネルの子である静的テキスト ボックスへのハンドルであることを示すために、次のようにコンソールにch型と文字列を出力しました。ch

ans =

uicontrol


ans =

hello

次に、プッシュ ボタンを押したときにテキスト ボックス内の文字列を更新する方法の例を示します。

function testGUI
fig = figure(1);
panel = uipanel(fig);
tbox = uicontrol('Style','text','String','hello','parent',panel);
button = uicontrol('Style','PushButton','String','push me',...
    'Position',[100 100 50 25]);
set(button,'Callback',@mycallback)

function mycallback(src,eventdata)
    set(tbox,'String','updated')
end

end
于 2013-07-19T20:59:19.813 に答える