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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 754
    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 754
    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
    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

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    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

  5. #5
    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()

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    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

  7. #7
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    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 ?

  8. #8
    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()

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