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