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 :

Problème getOpenFile sous perl 5.9


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre du Club Avatar de Perl53
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 109
    Points : 51
    Points
    51
    Par défaut Problème getOpenFile sous perl 5.9
    Bonjour,
    ayant installer perl 5.9, j'ai voulu tester mes anciens programmes et il se trouve que a présent, j'ai un problème quand je récupère un nom de fichier avec la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nom_fichier = $fenetre -> getOpenFile ( -initialdir => 'C:\....' ) ;  # sous Windows
    je ne peut pas lire ce fichier ou écrire dedans, par exemple quand c'est un fichier texte alors que avec perl 5.8.3, cela marchait très bien

  2. #2
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nom_fichier = $fenetre -> getOpenFile ( -initialdir => 'C:/' ) ;  # sous Windows
    http://perl.developpez.com/faq/tk/?p...ectionFichiers

  3. #3
    Membre du Club Avatar de Perl53
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 109
    Points : 51
    Points
    51
    Par défaut
    cela ne change rien le problème est que quand le chemin du fichier est stocké dans $nom_fichier, je ne peut pas par exemple lire $nom_fichier alors que si j'initialise $nom_fichier avec un chemin et que je le lis, ça marche

  4. #4
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Un peu plus de code pour voir comment tu t'y prends

  5. #5
    Membre du Club Avatar de Perl53
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 109
    Points : 51
    Points
    51
    Par défaut
    mon programme a pour but de lire le fichier audio choisi par getOpenFile, il marchait très bien sous perl 5.8.3 :
    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
    #! /usr/bin/perl -w
    use Tk;
    use Win32::MediaPlayer;
     
    $fenetre = new MainWindow ();
     
    $cadre_bouton = $fenetre -> Frame () -> pack ();
     
    $img_play = $cadre_bouton -> Photo ( -file => "play.gif" );
    $cadre_bouton -> Button (-image => $img_play ,-command => \&Play) -> pack (-side => 'left');
     
    my $types = [
         ['Musique',['.mp3', '.wma']],
         ['Vidéos','.avi'],
     ];
     
    sub Ouvrir {
    	$nom_fichier = $fenetre -> getOpenFile ( -initialdir => 'C:\Users\Kévin\Music' ,-filetypes=>$types) ;  # sous Windows
    	print "$nom_fichier\n" ;
    	$music = "unplay";
    }
     
    sub Play {
    	if ($music ne "play") {
    		$winmm = new Win32::MediaPlayer;  
    		$winmm->load($nom_fichier);        
    		$winmm->play;                    
    		$winmm->volume(100);             
    		$winmm->seek('00:00'); 
    		$music = "play";
    		print 'Total Length : '.$winmm->length(1),$/;
    		print "$music\n";
    		while ($music eq "play") {
    			 $pos = $winmm->pos(1);
    			 $fenetre -> update;
    		}
    	}elsif($pause = "oui"){
    		$winmm->resume;
    		$pause = "non"
    	}
    }
     
    MainLoop ();
    et voici le messgae d'erreur que maintenant j'obtiens, le problème ne venant pas du module, il marche avec une scalaire initialisée :

  6. #6
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Voilà avec quelques correction :
    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
    #! /usr/bin/perl
    use warnings;
    use strict;
    use Tk;
    use Win32::MediaPlayer;
     
    my $fenetre = new MainWindow();
     
    my $cadre_bouton = $fenetre->Frame()->pack();
    my $img_play = $cadre_bouton -> Photo ( -file => "play.gif" );
    $cadre_bouton->Button(
      -image => $img_play ,
      -command => \&Play,
    )->pack( -side => 'left' );
     
    my $music = "unplay";
    my $pause = "non";
     
    sub Ouvrir {
      my $types = [ [ 'Musique', [ '.mp3', '.wma' ] ], [ 'Vidéos', '.avi' ], ];
      my $nom_fichier = $fenetre->getOpenFile(
        -initialdir => 'C:\Users\Kévin\Music',
        -filetypes  => $types,
      );    # sous Windows
      print "$nom_fichier\n";
      $music = "unplay";
      return $nom_fichier;
    }
     
    sub Play {
      my $winmm;
      if ( $music ne "play" ) {
        $winmm = new Win32::MediaPlayer;
        my $nom_fichier = Ouvrir();
     
        $winmm->load($nom_fichier);
        $winmm->play;
        $winmm->volume(100);
        $winmm->seek('00:00');
        $music = "play";
        print 'Total Length : ' . $winmm->length(1), $/;
        print "$music\n";
        while ( $music eq "play" ) {
          my $pos = $winmm->pos(1);
          $fenetre->update;
        }
      }
      elsif ( $pause eq "oui" ) {
        $winmm->resume;
        $pause = "non";
      }
    }
     
    MainLoop();
    C'est marrant, car j'avais déjà fait aussi un petit lecteur de musique en TK il y a quelques temps qui fonctionnait bien .

    Petit conseil.
    - Apprends à bien déclarer tes variables et utiliser use strict;, c'est la base.

    Courage

  7. #7
    Membre du Club Avatar de Perl53
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 109
    Points : 51
    Points
    51
    Par défaut
    j'ai toujours le meme problème

  8. #8
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    euh tu deconnes là ? voici le script qui fonctionne chez moi

    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
    #! /usr/bin/perl
    use warnings;
    use strict;
    use Tk;
    use Win32::MediaPlayer;
     
    my $fenetre = new MainWindow();
     
    my $cadre_bouton = $fenetre->Frame()->pack();
    my $img_play = $cadre_bouton -> Photo ( -file => "play.gif" );
    $cadre_bouton->Button(
      -image => $img_play ,
      -command => \&Play,
    )->pack( -side => 'left' );
     
    my $music = "unplay";
    my $pause = "non";
     
    sub Ouvrir {
      my $types = [ [ 'Musique', [ '.mp3', '.wma' ] ], [ 'Vidéos', '.avi' ], ];
      my $nom_fichier = $fenetre->getOpenFile(
        -initialdir => 'C:\Users\Kévin\Music',
        -filetypes  => $types,
      );    
     
      $music = "unplay";
      return $nom_fichier;
    }
     
    sub Play {
      my $winmm;
      if ( $music ne "play" ) {
        $winmm = new Win32::MediaPlayer;
        my $nom_fichier = Ouvrir();
        return unless (defined $nom_fichier);
        $winmm->load($nom_fichier);
        $winmm->play;
        $winmm->volume(100);
        $winmm->seek('00:00');
        $music = "play";
        print 'Total Length : ' . $winmm->length(1), $/;
        print "$music\n";
        while ( $music eq "play" ) {
          my $pos = $winmm->pos(1);
          $fenetre->update;
        }
      }
      elsif ( $pause eq "oui" ) {
        $winmm->resume;
        $pause = "non";
      }
    }
     
    MainLoop();
    Teste le, si ça ne fonctionne pas, donne moi le message d'erreur.

    NB: Test d'abord des fichiers musique dont le nom ne contient pas d'accents et ensuite avec accents.
    Je pense que tu dois avoir des soucis avec les accents, j'avais déjà eu ça. Si c'est le cas, je te montrerais comment gérer l'encodage.

  9. #9
    Membre du Club Avatar de Perl53
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 109
    Points : 51
    Points
    51
    Par défaut
    ça marche sans accent ^^

  10. #10
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    T'as essayé ceci ?
    NB: Test d'abord des fichiers musique dont le nom ne contient pas d'accents et ensuite avec accents.
    Je pense que tu dois avoir des soucis avec les accents, j'avais déjà eu ça. Si c'est le cas, je te montrerais comment gérer l'encodage.

  11. #11
    Membre du Club Avatar de Perl53
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 109
    Points : 51
    Points
    51
    Par défaut
    dsl pas vu le nb au début

  12. #12
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    test un fichier mp3 de nom toto.mp3 par exemple ne contenant pas dans les chemin d'accents ou simple quote. Ex : C:/toto.mp3.

    Tu sélectionnes toto.mp3 dans le C. Si ça ça marche, c'est un problème d'encodage.

    Tu devra mettre en début de script :

    et dans ta procédure ouvrir, tu remplaces
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return encode( "iso-8859-1",$nom_fichier);

  13. #13
    Membre du Club Avatar de Perl53
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 109
    Points : 51
    Points
    51
    Par défaut
    maintenant ça marche avec tous les fichiers, merci beaucoup mais maintenant je vais être obligé de mettre encode (...) a chaque fois que j'aurais un fichier avec un nom contenant des accents ?

  14. #14
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut


    N'oublie pas le tag résolu.

  15. #15
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Citation Envoyé par Perl53 Voir le message
    maintenant ça marche avec tous les fichiers, merci beaucoup mais maintenant je vais être obligé de mettre encode (...) a chaque fois que j'aurais un fichier avec un nom contenant des accents ?
    Bah non. Encode est mis dans la procédure ouvrir, donc ça suffit pour le reste. Tout est question d'encodage de ton script, du nom des fichiers.

  16. #16
    Membre du Club Avatar de Perl53
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 109
    Points : 51
    Points
    51
    Par défaut
    ce que je voulais dire c'est si je dois faire un autre programme contenant un openfile et que j'ai encore des nom de fichiers avec des accents a ouvrir je serais a chaque fois obligé de mettre la fonction encode ? (surtout que mon nom contenant un accent, tous les fichiers musique ou texte que j'ai on un accent dans leur chemin)

  17. #17
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Dès que tu gères des fichiers avec accents, il est préférable de faire attention à cela oui.

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

Discussions similaires

  1. Problème police sous IE
    Par rellik dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 28/08/2005, 20h12
  2. .htaccess problème création sous windows
    Par Leviathan_72 dans le forum Apache
    Réponses: 2
    Dernier message: 18/05/2005, 20h29
  3. [langage] Table Dynamique sous PERL ?
    Par Slippers dans le forum Langage
    Réponses: 9
    Dernier message: 09/02/2005, 08h30
  4. Problème de sous-requete.
    Par Oberown dans le forum Access
    Réponses: 2
    Dernier message: 07/10/2004, 16h44
  5. ContextMenu de l'explorer: Problème de sous menu
    Par Ingham dans le forum Composants VCL
    Réponses: 8
    Dernier message: 26/02/2004, 08h06

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