2012-02-21 3 views
0

J'écris une interface graphique dans Scilab et j'affecte des rappels aux contrôles pushbutton. Lorsqu'un bouton est enfoncé, un autre contrôle est affecté, par ex. le texte à l'intérieur d'une zone de texte change. Cette routine entière (création et initialisation de l'interface graphique) vit à l'intérieur d'une fonction, c'est-à-dire que je dois appeler mon create_my_gui() pour l'exécuter.Rappels d'arguments dans Scilab

Mon problème réside dans la portée variable et l'utilisation de rappel. Plusieurs de mes boutons affectent exactement d'autres contrôles exactement de la même manière, donc je voudrais utiliser la même fonction de rappel et passer une poignée au contrôle que j'essaie d'affecter dans le rappel.

Par exemple, lorsque je presse le bouton N -ème, je voudrais passer la poignée N contrôle -ème dans le rappel:

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

Le problème est que les callbacks sont définis comme cordes:

myButton3.callback = 'buttonPressCallback (myTextBox3)' 

et après j'ai couru ma fonction create_my_gui(), toutes les variables hors de portée et sont détruits, y compris poignées à toutes les commandes. Lorsque j'appuie sur le bouton, Scilab essaie d'exécuter n'importe quelle chaîne spécifiée comme rappel et se plaint de la variable, par exemple, myTextBox3, qui n'existe pas.

Y a-t-il un moyen de faire référence à uicontrols dans Scilab après la sortie de la fonction qui les a créés? Je comprends que Scilab a des façons très particulières d'aborder les choses et peut-être que je ne pense tout simplement pas à des correctifs de programmation Scilab pour le moment. Y a-t-il la "bonne façon" de faire cela?

Répondre

2

Trouvé une solution décente. Chaque uicontrol peut être étiqueté en définissant myUicontrol.tag = 'my_tag';. Ce uicontrol peut alors être trouvé globalement en utilisant my_handle = findobj('tag','my_tag');.