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

GUI Python Discussion :

bug lors de l'import d'un script


Sujet :

GUI Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut bug lors de l'import d'un script
    Bonjour, je suis un grand débutant sur Pyhton.
    je suis en train de développer un petit programe a base de checkbuton.
    il y a deux modules,
    le premier marche comme je le désire: il donne un mapping des boutons cochés.

    le deuxième lance le premier module (quand on sélectionne le bouton Ajout suppression MGW)
    et là le mapping est toujours égale à [0, 0, 0] quelque soit le nombre de bouton cochés.

    si vous avez une idée de ce qu'il se passe...

    il faut mettre des fichiers config1. txt , config2.txt,... dans le répertoire:C:/config_mgw



    premier module enregistré dans un fichier nommé check6.py

    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
    from tkinter import *
    import os
    fen = Tk()
    #fra1 = Frame(fen)
    class Bouton (Frame):
        #classe de bouton
        #fentre dans laquelle les boutrons vont s'ouvrir'
        def __init__(self, boss=None):
     
            Frame.__init__(self)
     
            print('je commence la class')
     
     
            #Label(root, text = 'Premier champ :')
            #on definit l'ensemble des fichiers de conf dans le repertoir cible
            self.vars = []
            self.chk=[]
            i = 0
            nbvmg = 0
            listmgw = []
            filepath = []
            listmgw = os.listdir('C:/config_mgw')
            print('dans init listgmw=',listmgw)
            nbvmg = len(listmgw)
            filepath.append('C:/config_mgw/' + listmgw[i])
            #i = i + 1
            print ('listmgw dans Bouton=',listmgw)
            #met en place les boutons
            #print('picks=',listmgw)
            for pick in listmgw:
                #print('pick=',pick)
                var = IntVar()
     
                self.chk = Checkbutton(fen, text=pick, variable=var)
                #print('var=',var.get())
                #print('self.chk=',self.chk)
                self.chk.grid()
                self.vars.append(var)
     
     
        def allume(self):
     
            print('j alume les boutons du bas',self)
            Button(fen, text='Valider', command=self.state).grid()
            Button(fen, text='Retour', command=fen.destroy).grid()
            fen.mainloop
     
        def state(self):
            m=IntVar()
            var = IntVar()
            #print('self=',self,type(self))
            #print(("lambda=", lambda var: var.get(var)))
            #print('self.vars=',self.vars)
            #print('map=', map((lambda var: var.get()), self.vars))
            m=map((lambda var: var.get()),self.vars)
            print('vars',self.vars)
            print ('m dans state=',m)
            print('list de m dans state=',list(m))
            return list(m)
     
     
     
    print ('je suis dans check6')
     
    if __name__ == "__main__":
        #root=Tk()
        #listmgw=[]
        r1=Bouton()
        print ('r1=',r1)
        print('type de r1 dans main de check6=',type(r1))
        print('r1 en sortie=',r1)
        #r1.grid()
        r1.allume()
        #result=r1.state
        print ('r1 dans main=',r1)
        #print ('listmgw avant la sortie=',listmgw)
        #print('result=',result)
        r1.mainloop
    ceci est le second module (qui appelle check6 lorsque l'on sélectionne <Ajout suppression MGW>

    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
    import os
    from tkinter.filedialog import askopenfilename
    from tkinter import *
    from tkinter.filedialog import asksaveasfile, askopenfile
    #import check4
     
    class Application(Frame):
            def __init__(self):
                Frame.__init__(self) # constructeur de la classe parente
                self.master.title("comparaison mgw")
                frSup =Frame(self)
                print( 'init')
    def mgw ():
        result=[]
        #m=IntVar()
        #definir les mgw concernées
        print('je lance check6')
        import check6
        print('fin d import')
        m=check6.Bouton()# instanciation de la classe
        print('m dans mgw=',m)
        print('type de m dans mgw=',type(m))
        result=m.allume()
        print('fin allume',m)
        #result=m.state()
        print('result=',result)
        #m.allstates()
        print ('m=',m)
        print('classe de m=',type(m))
        #o=check6.state()#on recupere la list des mgw
        #print('list state o=',o)
        print('fin de check6, m=',m)
     
        print('mgw')
        m.mainloop
    def filtre ():
        #definir les filtre sur les parametres concernées
        print('filtre')
     
    def reference ():
        #definir la mgw de reference
     
        print('reference')
     
    if __name__ == '__main__':
        m=[]
        root=Tk()
        listmgw=[]
     
        app=Application()
        but=Button(root, text ="Def reference", command =reference)
        but.pack(side =LEFT)
        Button(root, text ="Ajout suppression MGW", command =mgw).pack(side =LEFT)
        print('pff')
        Button(root, text ="Filtre", command =filtre).pack(side =LEFT)
        Button(root, text ="quiter", command =root.destroy).pack(side =LEFT)
        app.mainloop()
    les résultats obtenus sont:
    le premier module check6.py seul quand le premier conif1.txt est sélectionné uniquement: list de m dans state= [1, 0, 0]
    le second modul essai3.py quand le premier conif1.txt est sélectionné uniquement: list de m dans state= [0, 0, 0]

    Si vous avez d'ou vient l'erreur..


    merci d'avance.

    Pug22

    P.S. j'ai ajouté les fichiers py, attention le répertoire n'est pas le même que celui de l'exemple.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Même en lisant les scripts attachés, il est pratiquement impossible de comprendre ce que tu veux faire.

    On a aussi l'impression que tu instancies 3 mainloop. Ça en fait deux de trop.

    Crée une main window et, si tu as besoin (vraiment, vraiment besoin, hein), tu ouvres une boîte de dialogue avec TopLevel pour ton bouton.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Il y a de fortes chances pour que votre soucis soit du aux premières lignes de check6.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from tkinter import *
    import os
    fen = Tk()
    lors de l'import la ligne "fen = Tk()" sera exécutée: çà va créer 2 applications Tk distinctes et des tas de soucis côté variables associées aux widgets.
    Poussez cette instruction après le 'if __name__ == "__main__":'.

    Citation Envoyé par VinsS Voir le message
    On a aussi l'impression que tu instancies 3 mainloop. Ça en fait deux de trop.
    On peut appeler mainloop autant de fois qu'on veut, ils s'empilent et se dépilent via les appels à .quit.
    Mais comme le PO a omis les ()... à part confondre le lecteur, çà ne fait pas grand chose.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    ok j'ai tres certainement mal expliqué ce que je voulais faire.
    et comme un dessin est mieux qu'une longue explication... je vous ai fait quelques screenshoot..

    bon alors déjà le but du programme est de sélectionner un certain nombre de fichier .txt se trouvant dans un répertoire défini, ici C:/config_mgw (on trouvera config1.txt, config2.txt et config3.txt dans notre exemple).
    lorsque le module check06 est lancé il exécute correctement ce que je lui demande: a savoir me renvoyer une liste de 0 et de 1: les 1 sont les fichiers selectonés: voir le screenshot check06 (on obtient bien liste = [0,1,0] car seul la config2.txt est sélectionnée.

    maintenant c'est la que ca se complique: je veux faire la même chose mais depuis un autre module essai03.py
    une fenêtre principale s'ouvre avec 4 boutons: Def reference, Ajout suppression MGW, Filtre, quitter.
    seul le bouton Ajout suppression est implémenté et appelle le script check06 vu précédemment.
    voir screenshoot essai03-2 on voit bien les 4 bouton précédemment décrits.
    en appuyant sur le deuxième bouton (ajout suppr...) une seconde fenêtre s'ouvre bien comme je le voulais, c'est notre fameux sélectionneur de fichiers confi1.txt, config2.txt, config3.txt.
    j'ai volontairement sélectionner le fichier config2.txt comme pour le premier exemple et on voit bien le mapping ne change pas (tout est a 0 [0,0,0]au lieu de renvoyer une liste [0,1,0])

    c'est donc normal d'avoir une deuxième fenêtre qui s'ouvre, mais j'ai l'impression que je perds les valeur en cours de route.. ou je ne sais pas...


    ai-je été plus clair?

    cordialement

    pug
    Images attachées Images attachées    

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,


    Citation Envoyé par Pug22 Voir le message
    c'est donc normal d'avoir une deuxième fenêtre qui s'ouvre, mais j'ai l'impression que je perds les valeur en cours de route.. ou je ne sais pas...
    Techniquement, une deuxième fenêtre, c'est un appel à TopLevel et non à Tk qu'il ne faut faire qu'une seule fois par "application".
    Ceci dit, rien ne vous empêche d'afficher dans la fenêtre principale (celle créé via l'appel Tk()) une Frame contenant des widgets avec l'utilisateur va interagir et, suivant le dialogue utilisateur, masquer cette Frame pour la remplacer par une autre.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [phpMyAdmin] Bug lors de l'import de gros CSV.
    Par boulate dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 26/03/2014, 14h34
  2. Réponses: 5
    Dernier message: 26/02/2013, 16h17
  3. Réponses: 2
    Dernier message: 07/05/2010, 21h57
  4. Bugs lors de l'importation du méta-data
    Par rdmontreal dans le forum W4 Express
    Réponses: 2
    Dernier message: 24/07/2009, 15h59
  5. [PHP 5.2] Bug lors de l'importation vers excel
    Par beegees dans le forum Langage
    Réponses: 2
    Dernier message: 08/02/2009, 13h47

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