Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

PB unicode avec gtk3 et DrPython

0 votes

comme prédit par l'oracle « Sam » j'ai fini par tomber dans le cas où mon programme buggue à cause de l'encodage.
Fatal error !!!!!!! blocage complet je ne comprends plus …..doute…..
et puis je reviens sur le site. Retour aux sources…...divines
Ah oui, ben oui.
Bêtement j'applique les 5 règles. Je pense les re appliquer
Que se passe t-il ce "con" de DrPython ne veut même plus de mon fichier source. Ouf j'ai une sauvegarde….

Je repars de zero avec un fichier qui trempe dans gtk3 ou gtk+ comme tu veux.
Et là catastrophe
https://python-gtk-3-tutorial.readthedocs.org/en/latest/unicode.html
==> gtk semble ne pas respecter tout les critères pas gloop

du coup j'investigue et …...
je suis en python 2.7 sous ubuntu

point 1

coding: utf-8 en première ligne avec mon éditeur en utf-8 est ok

point 2
avec gtk
from future import unicode_literals n'est pas applicable sinon sa plante
par conséquent je suis contraint à priori d'écrire les chaines comme suit

text = u"Fichier sélectionné"
surprise refus !!
je reviens donc sur
text = "Fichier sélectionné"
je vérifie les types je ne fais plus confiance à rien

et puis je note que DrPython lance python avec l'option -u
/usr/bin/python -u "/usr/local/lib/python2.7/dist-packages/raptor/filechooserdialog.py"
vous notez bien, du coup c'est logique

point 3
je pilote la sortie console par
sys.stdout = codecs.getwriter("utf-8")(sys.stdout)

le code complet pour comprendre ce que je fais

#!/usr/bin/env python
# coding: utf-8

#filechooserdialog.py
#inspiré de test_filechooserdialog_1.py
import sys
import codecs


import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class FileChooserDialog():
    """ choose file widget with Gtk.FileChooserDialog"""
    def __init__(self,debug= False,defaultfile='',withf=50,tooltip=None):
        #Stores your path
        self.path = None
        self.debug = debug
        self.dia = Gtk.FileChooserDialog("Please choose a file", None,
            Gtk.FileChooserAction.OPEN,
            (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
             Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
        self.add_filters(self.dia)
        self.dia.set_select_multiple(True)
        self.dia.set_filename(defaultfile)
        if tooltip is not None:
            self.dia.set_tooltip_markup(tooltip)


    def run(self):
        self.reponse = self.dia.run()
        if self.reponse == Gtk.ResponseType.OK:
            if self.debug:
                print("Open clicked")
                print("File selected: " + str(self.dia.get_filenames()))
                for e in self.dia.get_filenames():
                    print e
            self.path = self.dia.get_filenames()
        elif self.reponse == Gtk.ResponseType.CANCEL:
            if self.debug:print("Cancel clicked")
        self.dia.destroy()
        return self.reponse

    def get_files(self):
        ''' return list of selected file  '''
        return self.path

    def add_filters(self,dialog):
        ''' example could be filtered file '''
        filter_text = Gtk.FileFilter()
        filter_text.set_name("Text files")
        filter_text.add_mime_type("text/plain")
        dialog.add_filter(filter_text)

        filter_py = Gtk.FileFilter()
        filter_py.set_name("Python files")
        filter_py.add_mime_type("text/x-python")
        dialog.add_filter(filter_py)

        filter_any = Gtk.FileFilter()
        filter_any.set_name("Any files")
        filter_any.add_pattern("*")
        dialog.add_filter(filter_any)

if __name__ == "__main__":
    #sys.stdout = codecs.getwriter("utf-8")(sys.stdout) 
    info = "<span size='19000' foreground='red'>Définition des exclusions et inclusions</span>\n\
\tLes <span weight='bold'>exclusions</span> sont des consignes pour exclure certains plots HS sur demande externe aux règles du programme\n\
\tLes <span weight='bold'>inclusions</span> sont au contraires des demandes d'ajout aux remises en service en complément des règles du programme\n\
<span foreground='blue'><b>Pour les exclusions:</b></span>\n\
\t<span underline='single'><b>A minima le nom du DSLAM est nécessaire,</b></span> l'exclusion portera sur tout les plots HS du DSLAM.\n\
\tSi on veut un ciblage plus fin il faut désigner le chassis et la carte.\n\
\tle nom de l'UI, NRA et nom NRA ne sont que des compléments pour l'opérateur.\n\
\tSi plusieurs cartes sont à cibler mettre une ligne par carte\n\
\tPour la liste des ports on peut préciser les numéros de port séparée par des , ou ; pour désignation de port unitaire.\n\
\tPour une série consécutive utilisez le séparateur - ou : comme dans excel\n\
\tSi le numéro de carte ou de port est omis tout les éléments seront exclus."
    info = unicode(info,'utf-8', 'replace')
    exemple = FileChooserDialog(defaultfile='/home/francis/Documents/Python-linux/demo_outil_IP/Port_Scanning.py',tooltip=info)
    response = exemple.run()
    if response == Gtk.ResponseType.OK:
        sys.stdout = codecs.getwriter("utf-8")(sys.stdout) 
        text = "Fichier sélectionné"
        print type(text)
        text = unicode(text,'utf-8', 'replace')# ok ??
        print type(text)
        print text

        for e in exemple.get_files():
            print e

j'ai 3 questions
pourquoi j'ai une sortie qui n'est pas correcte sur la console
la sortie console
/usr/bin/python -u "/usr/local/lib/python2.7/dist-packages/raptor/filechooserdialog.py"


Fichier s�lectionn�
/home/francis/Documents/Python-linux/demooutilIP/Port_Scanning.py

autre question avant de continuer à redresser les divers autres codes de mon projet suis-je à l'abri d'autres surprises ???

dernier point j'utilisais pype sous window etant passé sous ubuntu la version que j'ai trouvé est bugguée pour ubuntu dommage j'aimais bien
du coup je suis passé à Drpython mais j'aime moins l'interface et les commandes de l'éditeur sont moins avancée. J'ai cherché et trouvé récemment wingide. Pas encore testé? vos avis
je programme que sur PC et pas gros système pour un projet de domotique sous gtk3.
la bascule de gtk2 à gtk3 est bien plus compliquée qu'annoncée sur le site officiel....
bref merci de vos réactions retour d'expérience et conseil toujours précieux

demandé 22-Avr-2016 par turboiii (112 points)

Ca fait beaucoup d'un coup!

1 Réponse

0 votes

Eh bien j'ai fini par trouver l'origine du problème......enfin pas tout à fait
j'ai changé d'éditeur et suis passé sur Wing Ide.

déjà Wing Ide est bien plus efficace que DR Python. et je n'ai plus de problème unicode.

répondu 26-Avr-2016 par turboiii (112 points)

Bon, ben cool.

...