0

ScilabでGUIを作成し、pushbuttonコントロールにコールバックを割り当てています。ボタンを押すと、別のコントロールが影響を受けます。たとえば、テキストボックス内のテキストが変更されます。このルーチン全体(GUIの作成と初期化)は関数内にあります。つまり、create_my_gui()実行するにはmyを呼び出す必要があります。

私の問題は、変数のスコープとコールバックの使用法にあります。私のボタンのいくつかは、他のいくつかのコントロールにまったく同じように影響を与えるので、同じコールバック関数を使用して、影響を与えようとしているコントロールへのハンドルをコールバックに渡したいと思います。

たとえば、N番目のボタンを押すと、ハンドルのN番目のコントロールをコールバックに渡します。

function buttonPressCallback  ( controlHandle )
    controlHandle.string = 'Button pressed!';
endfunction

問題は、コールバックが文字列として定義されていることです。

myButton3.callback = 'buttonPressCallback ( myTextBox3 )'

そして、関数を実行した後、すべてのコントロールへのハンドルを含めcreate_my_gui()、すべての変数がスコープ外になり、破棄されます。ボタンを押すと、Scilabはコールバックとして指定された文字列を実行しようとし、変数が存在しないなどのエラーを出します。myTextBox3

uicontrolsを作成した関数が終了した後、Scilabでuicontrolsを参照する方法はありますか?私は、Scilabが物事に対処するための非常に独特な方法を持っていることを理解しており、おそらく私はまだ正しいScilabプログラミングパターンを考えていません。これを行う「正しい方法」はありますか?

4

2 に答える 2

2

まともな解決策を見つけました。を設定することで、それぞれにタグuicontrolを付けることができます。これは、を使用してグローバルに見つけることができます。myUicontrol.tag = 'my_tag';uicontrolmy_handle = findobj('tag','my_tag');

于 2012-02-21T17:31:06.130 に答える
0

次のように、gcboを介して呼び出し元のuicontrolオブジェクトにアクセスできます。

get(gcbo,"value");
于 2018-07-10T21:04:52.980 に答える