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 de variables entrée/sortie de fonctions


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut Problème de variables entrée/sortie de fonctions
    Bonjour a tous et a toutes ,
    Voila j'ai un petit probleme: J essaye de creer une interface graphique sous matlab GUI avec GUIDE
    Je souhaite faire un dispositif pernettant de storer et trier des fichiers suivant certains criteres.
    Mais j'ai un pb dans mon GUI.
    Par exemple j'ai cette fonction pour ma listbox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function varagout listbox1_CreateFcn(hObject, eventdata, handles, str, nb_files,list,files)
    directory_name = uigetdir('C:\');%open path
        files=dir(directory_name) %acquiring  path
        list = files %acquiring of structur of files
        str = {list.name} %acquiring of name of file
        [s,nb_files] = size(str); %elements in the folder
     
     
        set(gcbo,'str',str)
        nb_files=nb_files-2
    Je veux pouvoir faire resortir la variable nb_files de la fonction CreateFcn liee a la listbox pour pouvoir la reutiliser dans ma fonction edit suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function edit1_Callback(hObject, eventdata, handles,nb_files)
    % hObject    handle to edit1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    type_taken=get(hObject,'String') %returns contents of edit1 as text
    %str2double(get(hObject,'String')) returns contents of edit1 as a double
    for n = 1:nb_files
    results=strcmp(file(n).type,type_taken);%compare string length et les valeurs des lenght
        if results==1
            indice(n).type=n
        else
            indice(n).type=0
        end
    Vous aurez compris que je fais une recherche par type dans l integralite de mes fichiers.

    Voici ce que Matlab m affiche quand j execute mon fichier .m
    ??? Input argument "nb_files" is undefined.

    Error in ==> essai1>edit1_Callback at 158
    for n = 1:nb_files

    Error in ==> gui_mainfcn at 75
    feval(varargin{:});

    Error in ==> essai1 at 42
    gui_mainfcn(gui_State, varargin{:});

    ??? Error while evaluating uicontrol Callback.
    Cela fait 2 jours que je cherche et je n'ai toujours pas trouve comment faire ressortir ma variable nb_files de ma fonction CreateFcn pour pouvoir la reutiliser dans le Callback de mon editbox

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Il faut utiliser GUIDATA ici.

    Dans listbox1_CreateFcn :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [s,handles.nb_files] = size(str);
    set(gcbo,'str',str)
    handles.nb_files=handles.nb_files-2 
     
    guidata(gcbf,handles)
    Et dans edit1_Callback :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for n = 1:handles.nb_files
    C'est l'idée bien entendu !

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    c'est ce que j appelle du rapide, j essaye tout de suite.

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    Pour l instant ca ne marche pas :
    J aurais du mettre l integralite de la fonction. je la mets a present :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    function listbox1_CreateFcn(hObject, eventdata, handles)
    directory_name = uigetdir('C:\');%open path
        files=dir(directory_name) %acquiring  path
        list = files %acquiring of structur of files
        str = {list.name} %acquiring of name of file
        [s,handles.nb_files] = size(str); %elements in the folder
     
     
        set(gcbo,'str',str)
        handles.nb_files=nb_files-2 %correcting because of . and ..
        guidata(gcbf,handles)
     
     
        strr=str
        for a = 1:nb_files
            x(a)=strr(a+2);%storage of file name
        end
        n=1;
    %cutting of file name
        for n = 1:nb_files %loop to process all the files 
            S = char(x(n)); %enforce the type of data
            rem = S;% provide the string to cut
            [strg, rem] = strtok(rem, '_'); %cut the string  
            file(n).driver=strg;
            [strg, rem] = strtok(rem, '_');
            file(n).num1=strg;
            [strg, rem] = strtok(rem, '_');
            file(n).distance=strg;
            [strg, rem] = strtok(rem, '_');
            file(n).type=strg;
            [strg, rem] = strtok(rem, '_');
            file(n).lenght=strg;
            [N]=n;
            file(n).indice=[N];
        end
     
     
     
    % hObject    handle to listbox1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
    % Hint: listbox controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
     
     
     
     
    function edit1_Callback(hObject, eventdata, handles,nb_files)
    % hObject    handle to edit1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    type_taken=get(hObject,'String') %returns contents of edit1 as text
    %str2double(get(hObject,'String')) returns contents of edit1 as a double
    for n = 1:handles.nb_files
    results=strcmp(file(n).type,type_taken);%compare string length et les valeurs des lenght
        if results==1
            indice(n).type=n
        else
            indice(n).type=0
        end



    Ps: comment fait on pour editer proprement sur le forum ?

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    il faut bien entendu penser à remplacer tous les nb_files par handles.nb_files dans listbox1_CreateFcn.

    Et peut être ajouter GUIDATA dans edit1_Callback :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    handles=guidata(gcbf);
    for n = 1:handles.nb_files
    Le GUIDE c'est vraiment pas mon truc

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    Merci pour ton aide ,
    J'ai modifie mon code comme tu me l'as conseille comme suit :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    function listbox1_CreateFcn(hObject, eventdata, handles)
    directory_name = uigetdir('C:\);%open path
        files=dir(directory_name) %acquiring  path
        list = files %acquiring of structur of files
        str = {list.name} %acquiring of name of file
        [s,handles.nb_files] = size(str); %elements in the folder
     
     
        set(gcbo,'str',str)
        handles.nb_files=handles.nb_files-2 %correcting because of . and ..
     
     
     
        strr=str
        for a = 1:handles.nb_files
            x(a)=strr(a+2);%storage of file name
        end
        n=1;
    %cutting of file name
        for n = 1:handles.nb_files %loop to process all the files 
            S = char(x(n)); %enforce the type of data
            rem = S;% provide the string to cut
            [strg, rem] = strtok(rem, '_'); %cut the string  
            file(n).driver=strg;
            [strg, rem] = strtok(rem, '_');
            file(n).num1=strg;
            [strg, rem] = strtok(rem, '_');
            file(n).distance=strg;
            [strg, rem] = strtok(rem, '_');
            file(n).type=strg;
            [strg, rem] = strtok(rem, '_');
            file(n).lenght=strg;
            [N]=n;
            file(n).indice=[N];
        end
     
     guidata(gcbf,handles)
     
    % hObject    handle to listbox1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
    % Hint: listbox controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
     
     
     
     
    function edit1_Callback(hObject, eventdata, handles,nb_files)
    % hObject    handle to edit1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    handles=guidata(gcbf);
     
    type_taken=get(hObject,'String') %returns contents of edit1 as text
    %str2double(get(hObject,'String')) returns contents of edit1 as a double
    for n = 1:handles.nb_files
    results=strcmp(file(n).type,type_taken);%compare string length et les valeurs des lenght
        if results==1
            indice(n).type=n
        else
            indice(n).type=0
        end
     
     
     
    end
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    et voici sa reponse
    ??? Undefined variable "file" or class "file".
     
    Error in ==> essai1>edit1_Callback at 160
    results=strcmp(file(n).type,type_taken);%compare string length et les valeurs des lenght
     
    Error in ==> gui_mainfcn at 75
            feval(varargin{:});
     
    Error in ==> essai1 at 42
        gui_mainfcn(gui_State, varargin{:});
     
    ??? Error while evaluating uicontrol Callback.

    Je pense qu il faut que je fasse de meme avec la variable file, mais comment faire s'il s agit d'une structure? On utilise la meme syntaxe ?

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

Discussions similaires

  1. Probleme de variable entre SQL et Php
    Par copin dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/06/2005, 10h58
  2. Partage d'une variable entre les processus fils
    Par Mehdi Feki dans le forum Linux
    Réponses: 7
    Dernier message: 09/01/2005, 13h34
  3. [langage] Probleme passage de variables entre modules
    Par Ludo167 dans le forum Langage
    Réponses: 4
    Dernier message: 13/08/2004, 12h25
  4. [recuperation de variable entre 2 jsp]
    Par maya5 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 02/06/2004, 13h23
  5. Types de variables entre mysql/php et flash
    Par ramses83 dans le forum Flash
    Réponses: 2
    Dernier message: 06/10/2003, 18h35

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