0

我正在 Scilab 中编写一个 GUI 并将回调分配给pushbutton控件。当一个按钮被按下时,另一个控件会受到影响,例如文本框内的文本会发生变化。整个例程本身(GUI 的创建和初始化)都存在于一个函数中,即我必须调用 mycreate_my_gui()来运行它。

我的问题在于变量范围和回调的使用。我的几个按钮以完全相同的方式影响其他几个控件,所以我想使用相同的回调函数并将句柄传递给我试图影响回调的控件。

例如,当我按下第N个按钮时,我想将句柄第N个控件传递给回调:

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

问题是回调被定义为字符串:

myButton3.callback = 'buttonPressCallback ( myTextBox3 )'

在我运行我的create_my_gui()函数之后,所有变量都超出范围并被销毁,包括所有控件的句柄。当我按下按钮时,Scilab 尝试运行指定为回调的任何字符串,并抱怨变量不存在,myTextBox3例如,不存在。

有没有办法在创建它们的函数退出后引用 Scilab 中的 uicontrols?我知道 Scilab 有非常特殊的解决问题的方法,也许我只是还没有考虑正确的 Scilab 编程模式。有没有这样做的“正确方法”?

4

2 回答 2

2

找到了一个不错的解决方案。每个uicontrol都可以通过设置来标记myUicontrol.tag = 'my_tag';。然后uicontrol可以使用my_handle = findobj('tag','my_tag');.

于 2012-02-21T17:31:06.130 回答
0

您可以通过 gcbo 访问调用 uicontrol 对象,例如:

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