- 締切済み
MATLABのポップアップメニューとFigureに
現在MATLABでコーディングをしてます。 下記のことで悩んでます。 対応する方法はあるか教えてください。 ・ポップアップメニューの中身を動的に切り替えたい。 ファイルを読み込み、その内容によってポップアップメニューの項目が3個だったり、 10個だったりと変化するのですが、方法がわからない。 ・Figure1からFigure2を引数つきで呼び出したい。 Figure1がメインの画面、Figure2がプロパティの画面として用意してます。 メイン画面のボタンを押下したときにFigure2を呼び出したいのですが可能ですか? またその時、ある値も一緒に渡したいのですがそれも可能でしょうか? お手数ですが、わかる方教えてください。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Kules
- ベストアンサー率47% (292/619)
・ポップアップメニューの中身を動的に切り替えたい。 http://www.mathworks.co.jp/jp/help/matlab/ref/uicontrol_props.html#bqxoiqg にあるように、ポップアップメニューのStringは 「文字列のセル配列」 「パディングされた(各項目の文字数が同じになるようスペースで埋めた)文字列の行列」 「垂直スラッシュを区切り文字として使用する文字列ベクトル」 のいずれかを設定することで複数項目を表示させることができます。一番楽なのはセル配列ですかね。 ということで、ファイルを読み込んだあと(それをどのような形で読み込むかはおまかせしますが、各項目にあたるものをセルの各要素に入れておくのがよいでしょう)、予めポップアップメニューを作成する時に取得しておいたオブジェクトハンドル (h=uicontrol('Style','PopUpMenu');とすれば取得可能)を使って set(h,'String',Str); のようにすればその時点でポップアップメニューの中身が切り替わります。 なお、guideを使ってる場合は、handles構造体のメンバにポップアップメニューのタグ名(デフォルトだとpopupmenu1とかなってると思います)があると思いますので、そちらを前述の例のhの代わりに使えます。 ・Figure1からFigure2を引数つきで呼び出したい。 figure2がguideで作成したものでなければ比較的いろいろな手が取れます。 例えば与えたい値がDataだとして、 figure('CreateFcn',{@hoge,Data}); としたうえで、mファイルhoge.mで function hoge(h,~,Data) としてやれば、関数hoge内でDataを使うことができます。 figureの代わりにdialogを使うという手もあるでしょう。 ただし、guideで作っていた場合はなかなか難度が上がります(私自身いろいろ調べましたが、有効な手が見つけられませんでした) 強引な方法ですが、figure1のボタンのcallbackの中で assignin('base','Data',Data); としておいて、figure2は open('figure2.fig'); で呼び出します。 guideの中でfigureにcreatefcnを設定してやり、その中で Data=evalin('base','Data'); とすることで、figure2の中でDataを使うことができます。 http://www.mathworks.co.jp/jp/help/matlab/ref/assignin.html http://www.mathworks.co.jp/jp/help/matlab/ref/evalin.html 参考になれば幸いです。