• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:matlabGUIのコールバック処理について)

matlabGUIのコールバック処理について

このQ&Aのポイント
  • matlabという言語を用いてGUIを構築しており、タブ機能を作成しています。ボタンを押した時にset関数を用いてメニュー内の各ボタンを表示/非表示させることで実現しようと考えています。
  • しかし、各ボタンの引数の渡し方が分からず戸惑っています。ファイルを分けてset関数を格納しようと考えています。
  • プログラムの実験用のコードが記載されたjikken1関数とjikken2関数を別ファイルに格納しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • Kules
  • ベストアンサー率47% (292/619)
回答No.1

ええと… 現在疑問となっているのは、 function jikken2(iranai,iirana) の引数iranai,iiranaを入力として使いたいなんだけど、 file_menu_update_button = uicontrol('Style', 'pushbutton', 'String', '適用',... 'Position', [90 10 40 20],'Callback','jikken2(iranai,iirana)'); とすると 「変数、または関数iranaiは未定義です」 みたいなエラーが出るのでどうしましょう?ということですかね? で、iranaiとかには非表示にするボタンとかのハンドルを入れるって感じでしょうか? そうですね… まあお手軽なのは各ボタンにタグをセットしておいて(set(handle,'Tag','Hogehoge')みたいに)、 あとは function jikken2(iranai,iirana) 内で h=findall(0,'Tag','Hogehoge'); とすれば(Hogehogeというタグがユニークなものであれば)一つのハンドルに決まるのであとはsetに使うことができます。 あるいは、guidataを用いて各ハンドルをfigureに保存しておき(構造体の形にすれば複数のハンドルを保存することが可能です)、 uicontrol('Style', 'pushbutton', 'String', '適用',... 'Position', [90 10 40 20],'Callback','jikken2(gcbo)'); とすれば、コールバックをしたときにgcbo(get call back object)のハンドルを関数jikkenn2に渡すので、関数jikken2内で function jikken2(h) H=guidata(h); とすればHの中に各ハンドルの構造体が入るので、後はsetに使うことができます。 あと、これはお求めの方法ではないかも知れませんが、 タブ機能を作るってことは ボタンAを押す→Aに関するオブジェクトだけ表示する ボタンBを押す→Bに関するオブジェクトだけ表示する みたいなことをしたいんですよね?で、ボタンAとボタンBはラジオボタンにしてるって感じでしょうか。 だとすると、 uipanelを複数作って(仮にuipanelA、uipanelBとします)、Aに関するオブジェクトはuipanelAの子に、Bに関するオブジェクトはuipanelBの子にします。 ボタンAを押す→uipanelAを表示、uipanelBを非表示 ボタンBを押す→uipanelBを表示、uipanelAを非表示 とすればお望みの機能ができると思うのですが。いちいち各オブジェクトのvisibleプロパティをオフにすることなく、uipanel自体のvisibleプロパティをon,offにすることで表示、非表示を実現出来ますし。uipanelAとuipanelBを完全に重ねてしまえば完全にタブ風になりますよね。 ただ、visibleをoffにしても前後関係は変わらないので、例えばuipanelAがuipanelBより前にあると、ボタンBを押すとuipanelBは見えるけどボタンなどの操作が出来ない、という状態になるかも知れません。その場合、figure上のChildrenプロパティの順番を替えてやることで解消されるはずです。 長文失礼しました。「そういうことじゃないんだよ」「そういうことだけど、説明が下手でよくわからないよ」 とかありましたら補足願います。もっと詳細な動作や現在意図しているコードの詳細がわかればもう少し有益な回答ができるかも知れません。 参考になれば幸いです。

aporochoko
質問者

お礼

御解答ありがとうございました。 質問内容が分かり難くて申し訳ありませんでした。 私のやりたいことは回答者様の仰る通りです。 回答者様の提言頂いたボタンにTagをつける方法で無事解決することができました! 非常に分かりやすい解説ありがとうございました!

関連するQ&A