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

Python Discussion :

mise à jour du nombre de frame


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut mise à jour du nombre de frame
    Bonjour à tous,

    sur ce code générant automatiquement des frames,

    j'impose, par exemple, un nombre maximum de 4 frames.

    Si 4 frames alors bouton "addlabel" grisé. là n'est pas le problème.

    Si une suppression est faites, alors i (compteur de nombre de frame) n'est pas mis à jour.

    Il faut rapatrier la valeur de r de la fonction def removeLabel(var): dans def addNewLabel

    J'ai essayé avec return style ceci (sans success)

    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
     
    ztest = 3
     
    def f2(ztest):
        ztest = 21
        ztest = ztest + 2
        return ztest
     
    def f1():
        print("valeur global", ztest)
        f2(ztest)
        valeur = f2(ztest)
        print("récupération valeur f2", valeur)
     
    f1()
    avec cette commande aussi sans success

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var.trace("w", lambda name, index, mode, i=i: removeLabel(i))
    voici le code
    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
     
     
    from tkinter import *
    from tkinter import messagebox                              # Librairie des fenêtres d'alerte
     
    def removeLabel(var):
        global frames
        global i
        z = -1
        for frame in frames:
            z = z + 1
            # Check the text variable of the label of this frame
            if frame.winfo_children()[4].var == var:                                                        # 4 est le nombre de labels à générer dans une frame
               # Supprime frame
               frame.destroy()
               # Mise à jour du nombre de frame
               frames = frames[:z] + frames[z+1:]
               z = -1
     
        # Mise à jour du nombre de frame
        r = 0
        for frame in frames:
            frame.winfo_children()[4].var.set(r)
            r = r + 1
        i = i - 1
        print("i", i)
     
    def addNewLabel():
        global  frames, i
        global table
        var = IntVar()
     
        frame = Frame(root)
        i = i + 1
     
        if i <= 5:
            frame.grid(row=i, column=4)
            var.set(len(frames))
            l = Label(frame, text="test")
            l.grid(row=0, column=0)
            l = Label(frame, textvariable=var)
            l.grid(row=0, column=1)
            l = Label(frame, textvariable=var)
            l.grid(row=0, column=2)
            l = Label(frame, textvariable=var)
            l.grid(row=0, column=3)
            l = Label(frame, textvariable=var)
            l.grid(row=0, column=4)
            l.var = var
     
            b = Button(frame, text="Remove", command=lambda: removeLabel(var))
            b.grid(row=0, column=5)
     
            frames.append(frame)                                                # liste des frames générée
     
        print("var.get()  ", var.get(), "     i  ",i)
        # var.trace("w", lambda name, index, mode, i=i: removeLabel(i))
        # print("eeeee", i)
     
     
        if i > 5:                                                                               # Limite du nombre de 10 frames à générer
            messagebox.showinfo("Info","Seulement 5 peuvent être sélectionées")
            c.configure(state=DISABLED)
            return "break"
        print("+i+",i)
     
     
    if __name__ == '__main__':
       root = Tk()
       frames = []
       table = []
     
       i = 1
     
       c = Button(root, text="add label", command=addNewLabel)
       c.grid(column=0, row=0)
       root.mainloop()
    merci de votre pour une éventuel solution. bonne journée

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Salut,

    Citation Envoyé par taratatasoleil Voir le message
    Si une suppression est faites, alors i (compteur de nombre de frame) n'est pas mis à jour.
    La variable i est bien mise à jour.

    Après que vous ayez codé çà pour se retrouver avec une valeur qui ne correspond pas/plus au nombre d'éléments de la liste frames est un soucis que vous pouvez résoudre assez simplement: virer la variable et utiliser len(frames) directement

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

  3. #3
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 312
    Par défaut
    Salut,

    Ton code est pour le moins abscons, voir commentaires dans le code:
    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
     
     
    ztest = 3
     
    def f2(ztest):
        ztest = 21          # tu crées un autre ztest ou changes-tu la valeur de l'argument ?
        ztest = ztest + 2   # on écrit ztest += 2
        return ztest        # autant écrire directement return 23
     
    def f1():
        print("valeur global", ztest)
        f2(ztest)           # une première fois
        valeur = f2(ztest)  # une deuxième fois, pourquoi ?
        print("récupération valeur f2", valeur)
     
    f1()
    Pour la suite, je ne suis pas sûr de ce que tu veux faire, je ne suis pas utilisateur de Tkinter mais tous tes labels partagent la même stringvar ? Normal ça ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    merci VinsS pour ta lumière

    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
     
       ztest = 3
        t=0
     
        def f2(ztest):
            ztest = 21
            t=33
            return t
     
        def f1():
            print("valeur global", ztest)
            valeur = f2(ztest)
            print("récupération valeur f2", valeur)
     
        f1()

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    La variable i est bien mise à jour.

    Après que vous ayez codé çà pour se retrouver avec une valeur qui ne correspond pas/plus au nombre d'éléments de la liste frames est un soucis que vous pouvez résoudre assez simplement: virer la variable et utiliser len(frames) directement

    - W
    après suppression, elle n'est mise à jour dans addNewLabel(). Il suffit d'ajouter une nouvelle pour s'apercevoir que i est toujours incrémenté depuis le dépard

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par taratatasoleil Voir le message
    après suppression, elle n'est mise à jour dans addNewLabel(). Il suffit d'ajouter une nouvelle pour s'apercevoir que i est toujours incrémenté depuis le dépard
    Si, au départ, vous dites:
    Si une suppression est faites, alors i (compteur de nombre de frame) n'est pas mis à jour.
    et qu'on peut constater que la variable est incrémentée dans addNewLabel et décrémentée dans removeLabel, pas facile de savoir le problème que vous cherchez à résoudre.

    A vous de le décrire plus précisément et de virer du code tout que qui est sans rapport avec...

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

  7. #7
    Invité
    Invité(e)
    Par défaut
    biensûr que la variable i est incrémentée dans la fonction addNewLabel() et décrémentée en removeLabel(var).
    En addNewLabel(), on peut surveille i et len(frames)
    En removeLabel(var), on retrouve l'information via len(frames) ou r

    Donc c'est bien séparer.
    Une fois la suppression d'une frame, la valeur de la variable i et len(frames), de addNewLabel() sont toujours à +1.
    Il suffit d'ajouter une frame pour s'en apercevoir.

    Le but est de mettre à jour cette valeur en addNewLabel() en rapatriant len(frames) ou r de removeLabel(var).

    ce qui permet, a nouveau d'ajouter des frames, tout en restant sous la limite fixée (nombre maximum de frames autorisées) par if i <= 5: en addNewLabel()


    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
     
     
    from tkinter import *
    from tkinter import messagebox                              # Librairie des fenêtres d'alerte
     
     
    if __name__ == '__main__':
       root = Tk()
       frames = []
       i = 1
     
       def removeLabel(var):
           global frames
     
           z = -1
           for frame in frames:
               z = z + 1
               # Check the text variable of the label of this frame
               if frame.winfo_children()[4].var == var:  # 4 est le nombre de labels à générer dans une frame
                   # Supprime frame
                   frame.destroy()
                   # Mise à jour du nombre de frame
                   frames = frames[:z] + frames[z + 1:]
                   z = -1
                   print("frames-removeLabel", len(frames))
     
           # Mise à jour du nombre de frame
           r = 0
           for frame in frames:
               frame.winfo_children()[4].var.set(r)
               r = r + 1
     
       def addNewLabel():
           global frames, i
           var = IntVar()
           frame = Frame(root)
           i = i + 1
     
           if i <= 5:
               frame.grid(row=i, column=5)
               var.set(len(frames))
               l = Label(frame, text="test")
               l.grid(row=0, column=0)
               l = Label(frame, textvariable=var)
               l.grid(row=0, column=1)
               l = Label(frame, textvariable=var)
               l.grid(row=0, column=2)
               l = Label(frame, textvariable=var)
               l.grid(row=0, column=3)
               l = Label(frame, textvariable=var)
               l.grid(row=0, column=4)
               l.var = var
     
               b = Button(frame, text="Remove", command=lambda: removeLabel(var))
               b.grid(row=0, column=5)
     
               frames.append(frame)  # liste des frames générée
               print("frames-addNewLabel", len(frames))
     
           print("var.get()  ", var.get(), "     i  ", i)
     
           if i > 5:  # Limite du nombre de 10 frames à générer
               messagebox.showinfo("Info", "Seulement 5 peuvent être sélectionées")
               c.configure(state=DISABLED)
               return "break"
     
       c = Button(root, text="add label", command=addNewLabel)
       c.grid(column=0, row=0)
     
       root.mainloop()

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Salut,

    Si le problème est résolu, marquez la discussion

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

  9. #9
    Invité
    Invité(e)
    Par défaut
    ce n'est pas le cas

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par taratatasoleil Voir le message
    ce n'est pas le cas
    C'est bien ce que je pensais...
    Pourtant votre dernière réponse contient un code sensiblement différent du premier sans exprimer clairement de problème/préoccupation particulière.

    Car s'il s'agit:
    Le but est de mettre à jour cette valeur en addNewLabel() en rapatriant len(frames) ou r de removeLabel(var).
    vous pourriez montrer ce que vous avez essayé avec len(frames) par exemple.

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

  11. #11
    Invité
    Invité(e)
    Par défaut
    En removeLabel(var), je lis le nombre de frame et la liste des frames, en ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    print("solde des frames générées-removeLabel", len(frames))
    print(frames)
    de même avec addNewLabel()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
               frames.append(frame)  # liste des frames générée
               if len(frames) > 4:
                   print("5ème frame --> ", len(frames))
                   i = len(frames)
           print("frames",frames)
           print("nombre de frames générée-addNewLabel", len(frames))
           print("     i  ", i)
           print("")
    même avec len(frames), il y a le décalage.
    Donc, il faut bien rapatrier une valeur de variable depuis removeLabel(var)
    mes essais sont sans succès avec Return

    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 *
    from tkinter import messagebox                              # Librairie des fenêtres d'alerte
     
     
    if __name__ == '__main__':
       root = Tk()
       frames = []
       i = 0
     
       def removeLabel(var):
           global frames
     
           z = -1
           for frame in frames:
               z = z + 1
               # Check the text variable of the label of this frame
               if frame.winfo_children()[4].var == var:  # 4 est le nombre de labels à générer dans une frame
                   print("test[1]2", var.get())
                   # Supprime frame dans GUI
                   frame.destroy()
                   # Mise à jour du nombre de frame
                   frames = frames[:z] + frames[z + 1:]
                   z = -1
                   print("solde des frames générées-removeLabel", len(frames))
                   # print("len(frames[:z]-removeLabel", len(frames[:z]))
                   # print("len(frames[z+1:]-removeLabel", len(frames[z + 1:]))
                   print(frames)
     
     
           # Mise à jour du nombre de frame
           r = 0
           for frame in frames:
               frame.winfo_children()[4].var.set(r)
               r = r + 1
     
       def addNewLabel():
           global frames, i
           var = IntVar()
           frame = Frame(root)
           i = i + 1
     
           if i <= 5:
               frame.grid(row=i, column=5)
               var.set(len(frames))
               l = Label(frame, text="test")
               l.grid(row=0, column=0)
               l = Label(frame, textvariable=var)
               l.grid(row=0, column=1)
               l = Label(frame, textvariable=var)
               l.grid(row=0, column=2)
               l = Label(frame, textvariable=var)
               l.grid(row=0, column=3)
               l = Label(frame, textvariable=var)
               l.grid(row=0, column=4)
               l.var = var
     
               b = Button(frame, text="Remove", command=lambda: removeLabel(var))
               b.grid(row=0, column=5)
     
               frames.append(frame)  # liste des frames générée
               if len(frames) > 5:
                   print("5ème frame --> ", len(frames))
                   i = len(frames)
           print("frames",frames)
           print("nombre de frames générée-addNewLabel", len(frames))
           print("     i  ", i)
           print("")
     
           if i > 5 :  # Limite du nombre de 10 frames à générer
               messagebox.showinfo("Info", "Seulement 5 peuvent être sélectionées")
               c.configure(state=DISABLED)
               return "break"
     
       c = Button(root, text="add label", command=addNewLabel)
       c.grid(column=0, row=0)
     
       root.mainloop()

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Salut,

    Citation Envoyé par taratatasoleil Voir le message
    même avec len(frames), il y a le décalage.
    De toutes façons, si vous commencez par incrémenter i et à créer une Frame avant même de savoir si vous allez pouvoir la placer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       def addNewLabel():
           global frames, i
           var = IntVar()
           frame = Frame(root)
           i = i + 1
    c'est pas gagné.

    Virez cette variable et contentez vous de tester len(frames). Vous verrez ce sera bien plus simple. (et çà ne fait que la 3ème fois que je vous le suggère).

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

  13. #13
    Invité
    Invité(e)
    Par défaut
    si je supprime i alors comment gérer le row --> frame.grid(row=i, column=5)?

  14. #14
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par taratatasoleil Voir le message
    si je supprime i alors comment gérer le row --> frame.grid(row=i, column=5)?
    ce i là vaut len(frames)+1...

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

  15. #15
    Invité
    Invité(e)
    Par défaut
    le décalage existe toujours, au point qu'une fois supprimer une frame, l'ajout qui suit, est fait sur la dernière frame.

    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
     
    from tkinter import *
    from tkinter import messagebox                              # Librairie des fenêtres d'alerte
     
    if __name__ == '__main__':
       root = Tk()
       frames = []
     
       def removeLabel(var):
           global frames
     
           z = -1
           for frame in frames:
               z = z + 1
               # Check the text variable of the label of this frame
               if frame.winfo_children()[4].var == var:  # 4 est le nombre de labels à générer dans une frame - identifie la correspondance de la valeur var (index) de la frame supprimée
                   print("----------", frame.winfo_children()[4].var.get())
                   # Supprime frame dans GUI
                   frame.destroy()
                   # Mise à jour du nombre de frame
                   frames = frames[:z] + frames[z + 1:]
                   # print("len(frames[:z]-removeLabel", len(frames[:z]))
                   # print("len(frames[z+1:]-removeLabel", len(frames[z + 1:]))
                   z = -1
                   print("frames", frames)
                   print("solde des frames générées-removeLabel", len(frames))
     
           # Mise à jour de l'indexation var des frame
           r = 0
           for frame in frames:
               frame.winfo_children()[4].var.set(r)
               r = r + 1
           print("r",r)
     
       def addNewLabel():
           global frames
           var = IntVar()
           frame = Frame(root)
     
           frame.grid(row=len(frames) + 1 , column=5)
           var.set(len(frames))
           l = Label(frame, text="frame_No._" + str(var.get()) + "   ")
           l.grid(row=0, column=0)
           l = Label(frame, textvariable=var)
           l.grid(row=0, column=1)
           l = Label(frame, textvariable=var)
           l.grid(row=0, column=2)
           l = Label(frame, textvariable=var)
           l.grid(row=0, column=3)
           l = Label(frame, textvariable=var)
           l.grid(row=0, column=4)
           l.var = var
     
           b = Button(frame, text="Remove", command=lambda: removeLabel(var))
           b.grid(row=0, column=5)
     
           frames.append(frame)  # liste des frames générée
           print("")
           print("frames", frames)
           print("nombre de frames générée-addNewLabel", len(frames))
           print("l.var", var.get())
     
       c = Button(root, text="add label", command=addNewLabel)
       c.grid(column=0, row=0)
     
       root.mainloop()

  16. #16
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Salut,

    Ce que je vois surtout c'est que si on supprime la dernière Frame, l'ajout suivant fonctionne.
    Par contre, si on supprime une Frame précédent la dernière, l'ajout suivant s'affiche sur la dernière Frame.

    Ca c'est parce que vous avez oublié de déplacer les Frame côté "grid" alors que vous renumérotez bien les "variables".

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

  17. #17
    Invité
    Invité(e)
    Par défaut
    donc, le problème viendrai d'ici var.set(len(frames)) situé dans la fonction addNewLabel() (uniquement après suppression d'une frame située entre le 1er et la dernière)

  18. #18
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Faites juste çà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
           # Mise à jour de l'indexation var des frame
           r = 0
           for frame in frames:
               frame.winfo_children()[4].var.set(r)
               frame.grid(row=r+1)   # <--- on bouge les lignes aussi.
               r = r + 1
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  19. #19
    Invité
    Invité(e)
    Par défaut
    merci.
    dimanche mon intuition été bonne, la manière pas

    "Il faut rapatrier la valeur de r de la fonction def removeLabel(var): dans def addNewLabel"

    merci de votre temps

  20. #20
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Salut,

    Je ne sais pas pourquoi vous faites çà mais codé par moi çà donnerait çà:
    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
    from tkinter import *
    from tkinter import messagebox                              # Librairie des fenêtres d'alerte
     
     
    variables = []
     
    def removeLabel(frame, var):
     
       frame.destroy()
       ix = variables.index(var)
       variables.pop(ix)
       # Mise à jour de l'indexation var des frame
       for i, v in enumerate(variables[ix:], start=ix):
           v.set(i)
     
     
    def addNewLabel(frame):
       new_frame = Frame(frame)
     
       var = IntVar()
       var.set(len(variables))
       variables.append(var)
     
       Label(new_frame, text="test").grid(row=0, column=0)
       for i in range(1, 5):
           Label(new_frame, textvariable=var).grid(row=0, column=i)
     
       Button(new_frame, text="Remove",
              command=lambda: removeLabel(new_frame, var)
              ).grid(row=0, column=i)
     
       new_frame.pack()
     
     
    if __name__ == '__main__':
       root = Tk()
     
       frame = Frame(root)
     
       c = Button(root, text="add label", command=lambda: addNewLabel(frame))
       c.grid(column=0, row=0)
       frame.grid(row=1, column=1)
     
       root.mainloop()
    Et si c'est plus simple, c'est juste parce que j'essaie d'utiliser au mieux ce que tkinter et Python me donnent plutôt que de taper comme un malade pour que çà passe en force.

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

Discussions similaires

  1. [WD-2010] Mise à jour du nombre de pages totales et de la page en cours
    Par gueulederack dans le forum VBA Word
    Réponses: 3
    Dernier message: 17/10/2013, 14h14
  2. mise à jour d'une frame à partir d'une autre frame
    Par youness78 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/07/2007, 14h58
  3. [Sunopsis v3] : récupérer le nombre de lignes mises à jour
    Par HarryCoco dans le forum Alimentation
    Réponses: 3
    Dernier message: 08/07/2007, 08h53
  4. mise à jour dans frame de fenetre mère
    Par rduvrac dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/10/2006, 06h55
  5. [PHP-JS] Mise à jour de frames avec Javascript
    Par GLDavid dans le forum Langage
    Réponses: 10
    Dernier message: 31/05/2006, 10h49

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