2012-02-21 79 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