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 Perl Discussion :

fonction parcourir ()


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 369
    Par défaut fonction parcourir ()
    Merci pour ta réponse je vais donc tenter de l'appliquer

    Pourrait tu m'aider a comprendre ceci stp?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $frame1 ->Button ( -text => 'Parcourir' ,
                         -command => sub {
                            			 my $chemin = $fen -> getOpenFile ( -initialdir => '/home') ;  
                        				 }
                	) ->pack (-anchor=>'w') ;
    Le truc c'est que je souhaiterais retourner $chemin mais je ne comprend pas sub sans nom.
    C'est bien une fonction? Comment pourrais je le retourner? svp

    Edit : j'ai fait un changement mais du coup mon boutton ne fonctionne plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sub Chemin()
    {
    my $chemin = my $fenetre -> getOpenFile ( -initialdir => '/home') ;  
    return $chemin;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #parcourir
    $frame1 ->Button ( -text => 'Parcourir' ,
                       -command => \&Chemin
                	 ) ->pack () ;
    pourrais tu m'aider svp?

    merci davance

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Voici un exemple :

    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
    #parcourir
    my $Chemin;
    $frame1->Label ( 
      -text => 'Chemin' ,
      -textvariable => \$Chemin,
    )->pack();
    $frame1->Button ( 
      -text => 'Parcourir' ,
      -command => [\&Chemin, $frame1, \$Chemin],
    )->pack();
     
    sub Chemin {
      my ($Widget, $RefChemin) = @_;
     
      my $File = $Widget->getOpenFile(
        -initialdir => '/home',
      );
     
      ${$RefChemin} = $File;
     
      return;
    }

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 369
    Par défaut
    J'avais pas vu ta réponse merci beaucoup

    j'ai un autre petit problème il me met une erreur dans mon constructeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sub new($picture)
    {
    	my $picture;
     
    	$photo = $picture;
    	$conn = new ConnectionFTP();
    	$connexion = $conn -> ConnectionFTP();
    }
    il me met une erreur a la premiere ligne

    aide moi stp

    merci d'avance

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Bon, faut que tu arrêtes de nous mélanger dans tes codes.

    1- Ton code n'as rien avoir avec Tk
    2- Il sort de nul part et il est impossible de t'aider ainsi
    Une erreur oui et la quelle ? Faut essayer d'être plus rigoureux quand vous chercher de l'aide, car sincèrement, ça ne donne pas envie de vous aider s'il faut se creuser la cervelle a deviner ce qui ne va pas.

    3- Ta façon de créer un constructeur est très mauvaise. Faut lire les articles sur Perl Objet à ce sujet

    Merci

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 369
    Par défaut
    OK alors désolé donc je vais donc vous mettre mes codes entiers pour que vosu compreniez d'accord? Désolé je ne vois que ca pour que tu voye mieux.

    Donc le fichier Interface.pl

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    #!/usr/bin/perl
    use strict;
    use Tk;
    use warnings; 
    use Tk::Photo;
    use Tk::PNG;
     
    use Transferts;
     
    #Création de la fenêtre principale
    my $fenetre = MainWindow->new();
     
    #Définition de la taille min de la fenêtre
    $fenetre->minsize('500','300');
     
    #Définition du title de la fenêtre
    $fenetre->title("Islo People");
     
    #Création de la barre de menu
    my $barre_menu = $fenetre->Frame(-relief => 'groove' , -borderwidth => 2);
     
    #Création de la barre du menu général
    my $menu_gen = $barre_menu->Menubutton(
                                         -text => 'Menu' ,
                                         -font => '{Garamond} 10',
                                         -tearoff => 0 ,
                                         -menuitems => [
                                                         [ 'command' => 'Quitter' ,
                                                           -font => '{Garamond} 10',
                                                           -command => \&Quitter
                                                         ]
                                                       ]
                                       );
     
    #  Création d'un cadre
        my $frame1 = $fenetre->Frame()->pack(-side => "bottom",-padx => 0, -pady => 0);
     
    #Affichage du menu général à gauche
    $menu_gen->pack(-side => 'left');
     
    #Affichage de la barre de menu en haut de la fenêtre
    $barre_menu->pack(-side => 'top', -anchor => 'n', -fill => 'x');
     
    my $ObjImage = $fenetre->Photo( -format => "png", -file => "/home/seb/Desktop/Islo_people/logo.png" );
    my $bouton2 = $fenetre -> Button 	(
        				-image => $ObjImage
    				)->pack();
     
    #parcourir
    $frame1 ->Button ( -text => 'Parcourir' ,
                       -command => \&Chemin
                	 ) ->pack () ;
     
    sub new
    {
    	my $t=new transferts;
    	$t->transfert(my $chemin);
    }
     
     
    # Envoyer
    $frame1 ->Button 	(
    					-text => 'Envoyer' ,
    					-command =>sub{Transferts::Transfert()}
    					)
    					->pack(); 
     
     #my $status_var =0;
     
        #$frame1->ProgressBar(
         #            -borderwidth => 10,
         #            -relief => 'sunken',
         #            -width => 35,
          #           -length => 500,
          #           -padx => 0,
          #           -pady => 0,
          #           -variable => \$status_var,
         #            -colors => [0, 'green'],
         #            -resolution => 0,
          #           -blocks => 50,
          #           -anchor => 'w',
          #           -from =>'0',
          #           -to => '100'
          #          )->pack(
          #                  -padx => 10,
          #                  -pady => 10,
          ##                  -fill => 'both'
          #                 );
     
        # La boucle dans laquelle la variable de ProgressBar change
     
        #for (my $lostime = 0 ; $lostime < 101 ; $lostime += 5)
        #{
        #    sleep 1 ;
        #    $status_var=$lostime ;
     
            # l'instruction suivante permet la prise en compte
            # des changements de valeurs de $status_var dans Perl/Tk,
            # ici  le widget Progressbar
     
         #   $fenetre->update;
       # }
     
       # sleep 5;
       #print "Fin de l'exemple update \n";
       # $fenetre->destroy;
     
    #Création de notre barre de statut à l'aide d'un Label
    #my $barre_statut = $fenetre->Label(-relief => 'groove', -text => "Islo people", -font => '{Garamond} 10');
     
    #On l'ajoute en bas de la fenêtre afin de lui donner l'effet barre de statut
    #$barre_statut->pack( -side => 'bottom', -fill => 'both');
     
    #Définition de la fonction de fermeture de l'application
    sub Quitter 
    {
        exit(0);
    }
     
    sub Chemin()
    {
    my $chemin = $fenetre -> getOpenFile ( -initialdir => '/home') ;  
    return $chemin;
    }
     
    MainLoop;
    Le fichier Transferts.pm

    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
    #!/usr/bin/perl
     
    use strict;
    use warnings;
    use Net::FTPSSL;
     
    use Connexion;
     
    package Transferts;
     
    my $photo;
    my $connexion;
    my $conn;
     
    sub new
    {
    	#$_[0] etant le premier parametre lors de l'appel de la fonction
    	my $picture=$_[0];
     
    	$photo = $picture;
    	$conn = new ConnectionFTP();
    	$connexion = $conn -> ConnectionFTP();
    }
     
    sub Transfert()
    {
    	my $verify;
    	my $ftps;
     
    	$conn = Connexion::ConnectionFTP();
    	$verify = VerifierExtension();
     
    	if($verify == "Connecté")
    	{
    		$ftps->put($_[0]); 
    	}
    	else
    	{
    		print "Mauvaise extension\nAutorise : jpeg, raw\n";
    	}
    }
     
    sub VerifierExtension()
    {
    	my $TonFichier = $_[0]; 
     	my $extension = "correct";
     
    # Verification de l'extension
    unless ( -e $TonFichier and $TonFichier =~ m{(?:jpe?g|raw)$} ) 
    		{
      		die($extension = "incorrect");
    		}
    	return $extension;
    }
     
    1;
    le fichier Connexion.pm

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    #!/usr/bin/perl
    use strict;
    use warnings;
    use Net::FTPSSL;
     
    package Connexion;
     
    # $file correspond au fichier de configuration du FTP
    my $file = '/home/seb/workspace/Islo_People/Configuration';
    my $user;
    my $mdp;
    my $server;
    my $port;
     
    # Constructeur
    sub new
    {
    	my @parametre = Recherche_parametre();
    	$user = $parametre[0];
    	$mdp = $parametre[1];
    	$server = $parametre[2];
    	$port = $parametre[3];
    }
     
    # Fonction qui parcours le fichier de configuration et qui les retournent
    sub Recherche_parametre()
    {
    	#Déclaration des variables
    	my $lignes;
    	my @config;
    	my @parametre;
     
    	#Ouverture du fichier de configuration
    	open(CONF, "<".$file);
    	# $lignes prend la valeur du fichier de configuration
    	while(defined($lignes = <CONF>))
    	{
    			#Séparation des attributs de $lignes 
    			@config = split("=", $lignes);
     
    			if($config[0] == 'user')
    			{
    				# Si la première valeur du tableau config est égale 
    				#à user alors $user prend la valeur de la deuxième valeur du tableau
    				$user=$config[1];
    			}
    			if($config[2] == 'mdp')
    			{
    				$mdp=$config[3];
    			}
    			if($config[4] == 'server') 
    			{
    				$server=$config[5];
    			}
    			if($config[6] == 'port')
    			{
    				$port=$config[7];
    			}
    		#Construction du tableau parametre avec les valeurs nécessaires à la connection du FTP
    		@parametre=($user,$mdp,$server,$port);
    	}
    	#Fermeture du fichier
    	close(CONF);
     
    	#On retourne le tableau
    	return @parametre;
    }
     
    # Fonction Connection qui retourne la valeur de l'état de la connection au FTP
    sub ConnectionFTP
    {
    	# Initialisation de $etat à vrai
    	my $etat = "vrai";
    	#my $parametre = Recherche_parametre();
    	#$user = $parametre[0];
    	#$mdp = $parametre[1];
    	#$server = $parametre[2];
     
     
    	#Connection au FTP
    	my $ftps = Net::FTPSSL->new($server,
    								Port=> $port,
    								Debug => 1)
    			or $etat = "faux"; # Si la connection n'est pas effectué $etat prend la valeur faux
     
    	$ftps->	login('$user', '$mdp')
    		or $etat = "faux"; # Si la connection n'est pas effectué $etat prend la valeur faux
     
    	# On retourne $etat
    	return $etat;
    }
     
    # Fonction Connection au FTP
    sub VerifierConnection
    {
    	my $connexion = ConnectionFTP();
     
    	if($connexion == 'vrai')
    	{
    		$connexion = "Connecté";
    	}
    	else
    	{
    		$connexion = "Non Connecté";
    	}
     
    	return $connexion;		
    }
    1;
    et le fichier de configuration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    user=photographe
    mdp=passe
    server=10.0.2.69
    port=21
    Voila donc je t'explique le problème il s'avère que comme tu peut le voir je tente de mettre un fichier sur un ftp.
    Hélas l'envoi ne fonctionne pas et je ne comprend pas pourquoi ca me met une erreur a la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ftps->	login('$user', '$mdp')
    de Connexion.pm

    Et voici l'erreur

    <<+ 555 Host undefined
    Tk::Error: Can't call method "login" on an undefined value at /home/seb/workspace/Islo_People/Connexion.pm line 86.
    Tk callback for .frame1.button1
    Tk::__ANON__ at /usr/lib/perl5/Tk.pm line 250
    Tk::Button::butUp at /usr/lib/perl5/Tk/Button.pm line 175
    <ButtonRelease-1>
    (command bound to event)

    Donc voila je sais que c'est un peu lourd a regardez mais tu ma demandé de bien situé le problème voila qu'y est fait je pense

    Aide moi stp je suis vraiment bloqué stp

    merci d'avance

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 369
    Par défaut
    Juste pour dire que je suis toujours bloqué afin de ne pas zapper la discution voila. Je comprend que ca peut prendre du temps pour éxaminer le code

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Sincèrement, je te l'ai déjà dit, tu t'y prends très mal pour concevoir du Perl Objet.

    Je ne sais pas si tu coder avant en langage objet ou non avant de te mettre au Perl, mais ton code est vraiment pas bon et bien écrit.

    Il est toujours préférable de faire simple au début et ensuite chercher à s'améliorer. Car tes constructeurs sont pas bien écrit, ta façon de passer des paramètres à tes procédures ou pseudo méthode est vraiment pas Perléene.

    Donc en amont même du code Perl/Tk qui est déjà assez différents à concevoir pour un habitué de Perl, tu as beaucoup de correctifs à faire.

    De plus, si tu regardes bien ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ftps->login('$user', '$mdp')
    '$user' => Tu utilises des simples cotes, donc il n' y aura pas d'interpolation, et le contenu sera $user et non le contenu de la variable.




    Je vais essayer de prendre quelques minutes pour mettre ton code un peu plus au propre.

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Bon, voici tes codes refaits, j'ai plusieurs remarques :

    1- Je ne vois absolument pas l'intérêt de faire un module Perl objet afin d'effectuer les transfères FTP. C'est vraiment inutile, mais bon, c'était ton choix.

    2- Je t'ai supprimé le module transfert.pm qui ne sert strictement à rien, tout est regroupé dans connexion.pm

    3- Toutes les modifications que je t'ai soumis la dernière fois par rapport à ton code Tk n'ont pas été prises en compte. Je vais pas passer mon temps à refaire la même chose x fois, si tu n'en tiens pas compte, j'arrêterais de t'aider vu que ça n'a plus aucun intérêt.

    4- En Perl Tk, il est préférable de mettre toutes les procédures en fin de script après le MainLoop.

    /home/seb/workspace/Islo_People/Configuration
    # Fichier de configuration
    [PARAMETERS]
    user=photographe
    mdp=passe
    server=10.0.2.69
    port=21

    Connexion.pm
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    package Connexion;
     
    use strict;
    use Carp;
    use warnings;
    use Net::FTPSSL;    # FTP
    use Config::Std;    # Parser fichier de configuration
     
    our @ISA     = qw(Exporter);
    our @EXPORT  = qw / ConnectionFTP Transfert FermerConnexion /;
    our $VERSION = '0.01';
     
    # Constructeur
    sub new {
        my ( $class, $FichierConfig ) = @_;
     
    # reference anonyme vers une table de hachage vide (le choix du nom est libre)
        my $self = {};
     
        unless ( defined $FichierConfig ) {
            croak("Fichier de configuration non defini\n");
        }
     
        read_config $FichierConfig => my %config;
     
        $self->{Config} = $config{PARAMETERS};
     
        # Etat de la connexion
        $self->{etat} = 0;
     
    # on indique que cette reference est liée au package (à la class) $class qui
    #f audra utiliser.
        bless( $self, $class );
     
        #Connection au FTP
        my $ftps = Net::FTPSSL->new(
            $self->{Config}{server},
            Port  => $self->{Config}{port},
            Debug => 1
        ) or return $self;
     
        # Si la connection n'est pas effectué $etat prend la valeur faux
        $ftps->login( $self->{Config}{user}, $self->{Config}{mdp} )
            or return $self;
     
        # Connexion OK
        $self->{etat} = 1;
        $self->{FTP}  = $ftps;
     
        #on retourne la référence vers la table de hachage ainsi contruite.
        return $self;
    }
     
    sub Transfert {
        my ( $self, $fichier ) = @_;
     
        # Transfert du fichier
        if ( $self->{etat} == 1 ) {
            $self->{FTP}->put($fichier);
        }
        else {
            warn "Transfert impossible, connexion non etablie\n";
        }
        return;
    }
     
    sub VerifierExtension {
        my ($TonFichier) = @_;
     
        unless ( scalar(@_) == 1 ) {
            croak('Usage : VerifierExtension("Monfichier.jpeg");');
        }
     
        # Verification de l'extension
        unless ( -e $TonFichier and $TonFichier =~ m{(?:jpe?g|raw)$} ) {
            croak(
                "Mauvaise extension pour le fichier $TonFichier\nAutorise : jpeg, raw\n"
            );
        }
     
        return;
    }
     
    sub FermerConnexion {
        my ($self) = @_;
     
        $self->{FTP}->quit() if ( $self->{etat} == 1 );
     
        return;
    }
     
    1;
    interface.pl
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    #!/usr/bin/perl
    use warnings;
    use Carp;
    use strict;
     
    use Tk;
    use Tk::Photo;
    use Tk::PNG;
     
    use Connexion;
     
    # Connexion au serveur ftp
    my $file = '/home/seb/workspace/Islo_People/Configuration';
    my $ObjetConnexion = new Connexion($file);
     
     
    #Création de la fenêtre principale
    my $fenetre = MainWindow->new();
     
    #Définition de la taille min de la fenêtre
    $fenetre->minsize( '500', '300' );
     
    #Définition du title de la fenêtre
    $fenetre->title("Islo People");
     
    #Création de la barre de menu
    my $barre_menu = $fenetre->Frame( -relief => 'groove', -borderwidth => 2 );
     
    #Création de la barre du menu général
    my $menu_gen = $barre_menu->Menubutton(
        -text      => 'Menu',
        -font      => '{Garamond} 10',
        -tearoff   => 0,
        -menuitems => [
            [   'command' => 'Quitter',
                -font     => '{Garamond} 10',
                -command  => [\&Quitter, $ObjetConnexion],
            ]
        ]
    );
     
    #  Création d'un cadre
    my $frame1
        = $fenetre->Frame()->pack( -side => "bottom", -padx => 0, -pady => 0 );
     
    #Affichage du menu général à gauche
    $menu_gen->pack( -side => 'left' );
     
    #Affichage de la barre de menu en haut de la fenêtre
    $barre_menu->pack( -side => 'top', -anchor => 'n', -fill => 'x' );
     
    my $ObjImage = $fenetre->Photo(
        -format => "png",
        -file   => "/home/seb/Desktop/Islo_people/logo.png"
    );
    my $bouton2 = $fenetre->Button( -image => $ObjImage )->pack();
     
    #parcourir
    my $chemin;
    my $BoutonParcourir = $frame1->Button(
        -text    => 'Parcourir',
        -command => [ \&Chemin, $fenetre, \$chemin ],
    )->pack();
     
    # Envoyer
    my $BoutonEnvoyer = $frame1->Button( 
      -text => 'Envoyer',
        -command => sub {
            $ObjetConnexion->Transfert($chemin);
        },
     
    )->pack();
     
     
     
    #my $status_var =0;
     
    #$frame1->ProgressBar(
    #            -borderwidth => 10,
    #            -relief => 'sunken',
    #            -width => 35,
    #           -length => 500,
    #           -padx => 0,
    #           -pady => 0,
    #           -variable => \$status_var,
    #            -colors => [0, 'green'],
    #            -resolution => 0,
    #           -blocks => 50,
    #           -anchor => 'w',
    #           -from =>'0',
    #           -to => '100'
    #          )->pack(
    #                  -padx => 10,
    #                  -pady => 10,
    ##                  -fill => 'both'
    #                 );
     
    # La boucle dans laquelle la variable de ProgressBar change
     
    #for (my $lostime = 0 ; $lostime < 101 ; $lostime += 5)
    #{
    #    sleep 1 ;
    #    $status_var=$lostime ;
     
    # l'instruction suivante permet la prise en compte
    # des changements de valeurs de $status_var dans Perl/Tk,
    # ici  le widget Progressbar
     
    #   $fenetre->update;
    # }
     
    # sleep 5;
    #print "Fin de l'exemple update \n";
    # $fenetre->destroy;
     
    #Création de notre barre de statut à l'aide d'un Label
    #my $barre_statut = $fenetre->Label(-relief => 'groove', -text => "Islo people", -font => '{Garamond} 10');
     
    #On l'ajoute en bas de la fenêtre afin de lui donner l'effet barre de statut
    #$barre_statut->pack( -side => 'bottom', -fill => 'both');
     
    MainLoop;
     
    #Définition de la fonction de fermeture de l'application
    sub Quitter {
        my ( $ObjetConnexion ) = @_;
        $ObjetConnexion->FermerConnexion();
        exit(0);
    }
     
    sub Chemin {
        my ( $fenetre, $RefChemin ) = @_;
     
        ${$RefChemin} = $fenetre->getOpenFile( -initialdir => '/home', );
     
        return;
    }
    Voilà, tout est Ok. Tu as une base pour continuer à bosser.
    Bon courage

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 369
    Par défaut
    Bonjour djibril,

    Tout d'abbord un énorme merci pour ton aide et ton temps passé sur ce sujet. vraiment

    Alors j'ai repris ton code et comme tu le dis il n'y a pas forcément lieu de l'écrire en perl objet mais pour mon BTS il me faut la compétence objet et hélas je n'avais jamais fait de perl avant et donc le perl tk objet encore moins lol

    Donc passons maintenant au code je ne sais pas se qui se passe mais je n'arrive pas a me connecter au ftp

    <<+ 555 Can't open tcp connection! (10.0.2.69:21)
    Transfert impossible, connexion non etablie

    je dois mettre comme tu me l'a ecrit le fichier de conf ?
    c'est a dire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # Fichier de configuration
    [PARAMETERS]
    user=photographe
    mdp=passe
    server=10.0.2.69
    port=21
    je pense que oui car il tente bien d'accéder a ces paramètres dans le message d'erreur

    Mais du coup je ne vois pas d'ou vien l'erreur
    Cela viendrait t'il du FTP?
    Si oui y'aurait il un logiciel pour accéder un FTP stp
    car du coup je ne comprend pas du tout la lol
    aide moi encore stp

    merci d'avance

  10. #10
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 369
    Par défaut
    désolé du double post pour te dire que cela se connecte bien j'était bourré en faite lol

    maintenant j'attribue les bons droits a l'utilisateur et jte tien au courant

  11. #11
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 369
    Par défaut
    alors pour te tenir au courant tout de même mon sauveur lol

    Ton travail est nickel tout fonctionne très bien.
    Il y a un truc qui ne fonctionne pas bien c'est la vérification de l'extension qui ne retourne rien alors je sais pas si j'ai une erreur de syntaxe mais bon...

    Ah oui j'aurais besoin d'explication sur ton code car je t'avoue que je ne comprend pas tout et je pense que ce ne serait pas intelligent de ma part de pas te demander de m'expliquer ce que je ne comprend pas.

    Sinon la je vais tenter de faire apparaitre une nouvelle fenetre quand le transfert sera effectué disant que le fichier est bien envoyé. Voila je vais cherché

    edit : pour le moment j'ai fait ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ($self->{FTP}->get($fichier)) {
            	twAlert("Fichier transféré");
            }
            else {
            	twAlert("Fichier pas trouvé");
            }
    mais marche mal

    Ou alors si je n'arrive pas a faire ca (ce qui serais dommage) je vais faire en sorte que le prog envoie un mail a l'utilisateur voila.

    Je vais aussi rajouter une fonction testant si le fichier est bien une photo. Est ce que le module Image::Magick est bien pour ca?

  12. #12
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Pose moi toutes les questions que tu souhaites sur la compréhension du code que je t'ai donné en me montrant le code que tu ne comprends pas.

  13. #13
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 369
    Par défaut
    Je ne comprend pas le constructeur

    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
    sub new 
    {
        my ( $class, $FichierConfig ) = @_;
     
    # reference anonyme vers une table de hachage vide 
        my $self = {};
     
        unless ( defined $FichierConfig ) 
        {
            croak("Fichier de configuration non defini\n");
        }
     
        read_config $FichierConfig => my %config;
     
        $self->{Config} = $config{PARAMETERS};
     
        # Etat de la connexion
        $self->{etat} = 0;
     
    # on indique que cette reference est liée au package (à la class) $class qui
    #faudra utiliser.
        bless( $self, $class );
     
        #Connection au FTP
        my $ftps = Net::FTPSSL->new(
            $self->{Config}{server},
            Port  => $self->{Config}{port},
            Debug => 1
        ) or return $self;
     
        # Si la connection n'est pas effectué $etat prend la valeur faux
        $ftps->login( $self->{Config}{user}, $self->{Config}{mdp} )
            or return $self;
     
        # Connexion OK
        $self->{etat} = 1;
        $self->{FTP}  = $ftps;
     
        #on retourne la référence vers la table de hachage ainsi contruite.
        return $self;
    }

  14. #14
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Qu'est ce que tu ne comprends pas, soit plus clair?

  15. #15
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 369
    Par défaut
    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
     
    our @ISA     = qw(Exporter);
     
    our @EXPORT  = qw / ConnectionFTP Transfert FermerConnexion /;
     
    # Constructeur
    sub new 
    {
        my ( $class, $FichierConfig ) = @_;
     
    # reference anonyme vers une table de hachage vide 
        my $self = {};
     
        unless ( defined $FichierConfig ) 
        {
            croak("Fichier de configuration non defini\n");
        }
     
        $self->{Config} = $config{PARAMETERS};
     
    # on indique que cette reference est liée au package (à la class) $class qui
    #faudra utiliser.
        bless( $self, $class );
     
        #on retourne la référence vers la table de hachage ainsi contruite.
        return $self;
    }
     
    sub Transfert 
     
        my ( $self, $fichier ) = @_;
     
     
     
    sub VerifierExtension 
    {
        my ($TonFichier) = @_;
     
        unless ( scalar(@_) == 1 ) 
        {
            croak('Usage : VerifierExtension("Monfichier.jpeg");');
        }
     
        # Verification de l'extension
        unless ( -e $TonFichier and $TonFichier =~ m{(?:jpe?g|raw)$} ) 
        {
            croak(
                "Mauvaise extension pour le fichier $TonFichier\nAutorise : jpeg, raw\n"
            );
        }
     
    }
    voila j'ai mis toute les lignes que je ne comprend pas peut tu les détaillé stp

  16. #16
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Bon voilà de la lecture pour toi
    1 : Perl objet
    2 : Perl objet 2
    3 : exporter
    4 : voilà, lis déjà tout ça

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

Discussions similaires

  1. [Débutant] Fonction "Parcourir" et lecture d'Excel
    Par Chamane106 dans le forum VB.NET
    Réponses: 3
    Dernier message: 17/06/2013, 02h09
  2. Réponses: 8
    Dernier message: 18/05/2011, 14h04
  3. fonction parcourir et sélection
    Par joe12260 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 25/06/2009, 09h38
  4. Réponses: 8
    Dernier message: 01/12/2006, 09h05
  5. Fonctions récursives pour parcourir un arbre
    Par mikedavem dans le forum C
    Réponses: 4
    Dernier message: 05/06/2006, 12h00

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