2016-08-09 5 views
0

Matlab(R2016a)GUIに簡単な「ブラウズ」ボタンを作成しようとしています。コールバック関数uigetdirは2つのオプション引数STARTPATH, TITLEを持ってuigetdirをプッシュボタンのコールバックとして使用すると、奇妙で​​無効な引数が原因でクラッシュする

hd = dialog; 
hb = uicontrol('parent',hd,'style','pushbutton','string','browse',... 
'callback',@uigetdir); 

: 私のコードは次のようなものです。原則的に、私は私のブラウズボタンはオプションの引数の有無にかかわらずuigetdirを呼び出すかどうか、そのような

hd = dialog; 
hb = uicontrol('parent',hd,'style','pushbutton','string','browse',... 
'callback',{@uigetdir,'myStartPath','myTitle'); 

として、セルアレイ上の関数ハンドルとそれらを連結することで、私のコールバックにこれらを渡すことができ、それがクラッシュします。さまざまなエラー、同じ理由:uicontrolはコールバック関数への引数として2つのコールされていない奇妙な変数(UIプロパティを含む)を含めることを決定し、uigetdirはそれらの処理方法を知らない。

これは、GUIのコールバック関数としてuigetdir(またはその他の組み込み関数)を使用できないということですか?カスタム関数を書く以外にも解決策が必要でしょうか?

+1

[コールバックのドキュメント](http://www.mathworks.com/help/matlab/creating_guis/write-callbacks-using-the-programmatic-workflow.html#f16-1001315) – excaza

+1

本当ですか?ドキュメンテーションから: "関数定義は2つの入力引数、' hObject'と 'callbackdata'を定義しなければなりません。関数を呼び出すとき、Handle Graphicsは自動的に' hObject'と 'callbackdata'を渡します。 – excaza

+1

また、ドキュメントから: "注:' hObject'と 'callbackdata'引数をサポートしていない既存の関数を使いたい場合は、無名関数として指定することができます。例えば' uicontrol( 'Style' 'スライダー'、 'コールバック'、@(hObject、コールバックデータ)myfunction(x)); '" – excaza

答えて

4

は、デフォルトでは、すべてのuicontrolオブジェクトは、2つの入力引数が渡されます。

  • uicontrolハンドル自体
  • イベントに固有の情報を含むオブジェクト。あなたは、単に関数ハンドルを作成するには、関数名に@を付加することで、コールバックを定義するとき

これらの2つの引数は自動的に機能に渡されます。

代わりに、2つの入力引数を受け入れるように匿名関数を作成し、入力引数なしでuigetdirを呼び出して、デフォルトのコールバック入力を実質的に無視することができます。

set(hb, 'Callback', @(s,e)uigetdir()) 

あなたが開始パスと匿名関数内からuigetdirにそれらを渡すことができ、タイトルを渡したい場合。私は読んでお勧め

set(hb, 'Callback', @(s,e)uigetdir('mystartpath', 'mytitle')) 
関連する問題