IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques Discussion :

problème d'utilisation des de userdata, guidata, appdata


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 34
    Par défaut problème d'utilisation des de userdata, guidata, appdata
    Bonjour a tous,

    g crée une interface graphique qui permet d'ouvrir un fichier .mdl et d'en afficher tous les sous-systèmes dans une "listbox", a chaque fois que je clique sur un sous-système j'ai un tableau qui se crée automatiquement comportant le sous-système et les sous-sytèmes qui sont de niveau inférieur.

    g certain champs à remplir pour ce tableau qui vont être stockés dans une structure.

    ce que je veux faire c'est a chaque fois que je clique sur un sous-système j'ai pas à remplir à chaque fois les anciens champs que j'aurais rempli auparavant


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    function listbox1_Callback(hObject, eventdata, handles, previous)
    % hObject    handle to listbox1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Hints: contents = cellstr(get(hObject,'String')) returns listbox1 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from listbox1
    contents = cellstr(get(hObject,'String'))
    selection = contents{get(hObject,'Value')};
    selection = strrep(selection, ['               Level ',selection(length(selection))], '');
    selection = strtok(selection);
    open_system(selection);
    data = get(hObject, 'UserData')
    delete(data.t)
    Subsystem = find_all_subsystems(selection)
    row = Subsystem{2}.subsystem_blocks
    for i=2:length(Subsystem)
        switch str2double(Subsystem{i}.subsystem_level)
            case str2double(Subsystem{2}.subsystem_level) + 1
                row = [row, {Subsystem{i}.subsystem_blocks}]
        end
    end
    t = uitable('Position', [50, 450, 700, 100], 'ColumnName', {'Function', 'Stubbed', 'Fct Number'}, 'RowName', row, ...
                                 'ColumnFormat', {'char', 'logical', 'char'}, 'ColumnEditable', [true true true], 'CellEditCallback', @save_previous_data)
    getappdata(hObject, 'previous')
     
    dat = remplir_tab(t, previous)                         
    set(t,'Data', dat)
     
    data.t = t;
    set(hObject, 'UserData', data)

  2. #2
    Membre émérite Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Par défaut
    salut
    je n'ai pas tout compris mais à propos de ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    getappdata(hObject, 'previous')
     
    dat = remplir_tab(t, previous)
    je pense que tu veux écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    previous=getappdata(hObject, 'previous')
    
    dat = remplir_tab(t, previous)
    (il faut bien comprendre que ça ne fonctionne pas comme un load).
    ensuite il ne faut pas oublier de faire (dans ta fonction remplir_tab par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setappdata(fig_handle, 'previous', var);
    enfin je te conseille de terminer toutes tes instructions par un ";" car en général les fonctions retournent une valeur pour dire si l'exécution c'est bien passée et ça te pourrit la fenêtre de commande.

  3. #3
    Membre averti
    Inscrit en
    Février 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 34
    Par défaut
    Merci ta sans doute raison, ça m'a permis de corriger un grand nombre d'erreur mais j'ai encore quelques petits soucis concernant l'utilisation de 'celleditcallback'

    bon voilà si jamais il y a d'autres input à ajouter à la fonction save_previous_data apart ceux de la 'source' et 'eventdata' comment je dois faire là??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    t = uitable('Position', [50, 450, 700, 100], 'ColumnName', {'Function', 'Stubbed', 'Fct Number'}, 'RowName', row, ...
                                 'ColumnFormat', {'char', 'logical', 'char'}, 'ColumnEditable', [true true true], 'CellEditCallback', {@save_previous_data, previous})

    j'explique d'avantage

    a chaque fois que je remplis une table, je dois mémoriser ces informations dans une structure que j'utiliserai par la suite pour remplir d'autres tables

    le problème c'est que cette structure qui est une entrée de la fonction save_previous_data demeure toujours vierge elle n'est pas mise à jour et on ne m'affiche aucune erreur

    merci de m'aider j'en ai grand besoin

  4. #4
    Membre émérite Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Par défaut
    salut
    d'après ce que je comprends, une solution serait de redéfinir le callback à chaque fois que la variable "previous" change.
    Ce qui donne sous une autre syntaxe que la tienne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    %code qui me permet de calculer previous
    set(handleTable, 'CellEditCallback', @(src, evnt)save_previous_data(src, evnt, previous));
    ici previous change avant chaque nouvelle définition du callbak
    je ne sais pas s'il y a une manière "dynamique" de faire ceci (mais il y a sûrement plus élégant).

    edit: après de courtes recherches je suis un peu sceptique
    Citation Envoyé par doc Matlab - Anonymous Functions

    Anonymous functions commonly include two types of variables:

    * Variables specified in the argument list. These often vary with each function call.
    * Variables specified in the body of the expression. MATLAB captures these variables and holds them constant throughout the lifetime of the function handle.

    The latter variables must have a value assigned to them at the time you construct an anonymous function that uses them. Upon construction, MATLAB captures the current value for each variable specified in the body of that function. The function will continue to associate this value with the variable even if the value should change in the workspace or go out of scope.

    The fact that MATLAB captures the values of these variables when the handle to the anonymous function is constructed enables you to execute an anonymous function from anywhere in the MATLAB environment, even outside the scope in which its variables were originally defined. But it also means that to supply new values for any variables specified within the expression, you must reconstruct the function handle.

  5. #5
    Membre averti
    Inscrit en
    Février 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 34
    Par défaut
    j'ai utilisé votre syntaxe et elle marche parfaitement mais j'ai du remplacé la méthode de partage des données "Application data" par "gui data" et ça marche parfaitment.


    Merci infiniment pour ton aide précieuse Tubaas...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [log4j] problème pour utilisation des extras
    Par shift dans le forum Weblogic
    Réponses: 0
    Dernier message: 06/12/2007, 09h58
  2. Problème d'utilisation des threads dans mes servlets
    Par casho dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 08/08/2007, 19h34
  3. Problème d'utilisation des files
    Par AraBorLeg dans le forum C
    Réponses: 4
    Dernier message: 06/01/2007, 20h55
  4. Réponses: 1
    Dernier message: 24/11/2006, 16h36
  5. Problème d'utilisation des attributs width et height avec une image distante
    Par Ptit_Mouss dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/09/2006, 15h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo