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

GTK+ avec Python Discussion :

problème d'encoding avec un drag-and-drop.


Sujet :

GTK+ avec Python

  1. #1
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut problème d'encoding avec un drag-and-drop.
    Salut les PyGTK,

    J'ai construit une petite drop-box avec un treeview qui peut accueillir des fichiers et des dossiers.

    Tout semblait fonctionner comme prévus jusque j'essaie de slider un fichier ou un dossier dont le nom contient des caractères non-ascii.

    J'ai identifier le problème:
    gtk formate le titre du fichier | dossier en unicode format URL avec a la place '\x' des '%' bref rien de bien grave me dirai vous un petit coup de urllib.unquote() et le problème est régler mais ce n'est pas le cas car dans mon code il y a des appels a os.path.isdir() et os.path.isfile() dont l'appel échoue avec en paramètre le format:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    data=selection.get_text()
    if isdir(urllib.unquote(data)[7:-1]) : # Les données arrivent sous forme u"file:///home/nom_nom/fichi%C3%A9\n" 
      pass                                 # pour un fichier s'appellant fichié.
    Et la cause de mes soucis est a trouver dans les tréfonds du module os.path:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >>> os.path.supports_unicode_filenames
    False
    Bien sur j'ai essayer de convertir en str() sans succès... avez vous une idée ???

    Merci pour vos réponses éclairés illuminant ma grande ignorance.

    PS: Je viens de terminer un nouveau site internet qui a pour sujet d'exposer mes créations d'imagerie 3D, jetez y un œil si vous aimez la 3D.
    http://www.3dreaming-imaging.net/

    Bon python a vous.

    PS: je viens de remarquer que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >>> print urllib.unquote("file:///home/nom_nom/fichi\xC3\xA9\n")[7:-1]
    /home/nom_nom/fichié
    a méditer ???
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  2. #2
    Candidat au Club
    Homme Profil pro
    mécanicien
    Inscrit en
    Septembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : mécanicien

    Informations forums :
    Inscription : Septembre 2014
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour

    J'ai eu le même soucis ... C'est les % ... J'ai fais comme ceci ( dsl si c'est pas très propre , mais ça fonctionne )

    Récupération du drag and drop :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    def got_data_cb(self, wid, context, x, y, data, info, time):
    		# Je récupére l'emplacement du fichier comme ceci
    		emplacement = data.get_uris()[0].split('file://')[1]
     
    		# J'appel la fonction en lui envoyant l'emplacement , elle me retourne l'emplacement avec le bon encodage 
    		emplacement = self.fonction_encodage(emplacement)
                    # ici ton test 
                    if os.path.isdir(emplacement) == True:  
                        pass
    La fonction :
    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
     
    def fonction_encodage(self, emplacement):
    		listeVide = []
    		liste_search_encodage = emplacement.split('%') 
    		liste_search_encodage.remove(liste_search_encodage[0])
     
    		for index, element in enumerate(liste_search_encodage):
    			if len(element) == 2 and element != liste_search_encodage[-1]:
    				listeVide.append( element + liste_search_encodage[index + 1][:2])
     
    		emplacement = emplacement.replace('%', '')
    		for element in listeVide:
    			if element in emplacement:
    				emplacement = emplacement.replace(element, element.decode('hex'))
     
    		return emplacement

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/02/2014, 20h17
  2. Gestion du click avec le drag and drop
    Par Tendhor57 dans le forum jQuery
    Réponses: 4
    Dernier message: 07/08/2013, 10h08
  3. [WD16] Perte d'identifiant dans un arbre avec le drag and drop
    Par Francis D dans le forum WinDev
    Réponses: 0
    Dernier message: 05/04/2011, 11h22
  4. Réponses: 0
    Dernier message: 21/07/2010, 06h37
  5. Réponses: 1
    Dernier message: 29/04/2006, 16h55

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