2012-02-21 129 views
0

我正在Scilab中编写一个GUI并为pushbutton控件分配回调函数。当一个按钮被按下时,另一个控制受到影响,例如,文本框内的文本发生变化。这整个例程本身(GUI的创建和初始化)位于一个函数内部,也就是我必须调用我的create_my_gui()来运行它。Scilab中参数的回调函数

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

例如当我按下Ñ个按钮,我想Ñ个控制传递手柄插入回调:

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

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

myButton3.callback = 'buttonPressCallback (myTextBox3)' 

而且我跑我create_my_gui()功能之后,所有的变量超出范围和被破坏,包括处理所有控件。当我按下按钮时,Scilab尝试运行指定为回调的任何字符串,并且抱怨变量myTextBox3,例如,不存在。

在创建它们的函数退出之后,有什么方法可以引用Scilab中的uicontrols?我知道Scilab有非常奇怪的方式来处理事情,也许我只是没有考虑正确的Scilab编程模式。有没有这样做的“正确方法”?

回答

2

找到了一个体面的解决方案。通过设置myUicontrol.tag = 'my_tag';,每个uicontrol可以是标记为。然后可以使用my_handle = findobj('tag','my_tag');在全球找到uicontrol