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
|
# https://docs.python.org/fr/3/index.html -- https://docs.python.org/fr/3/library/functions.html#enumerate --
from tkinter import *
from tkinter import messagebox # Librairie des fenêtres d'alerte
import tkinter
variables = [] # tableau contenant le listing des variables var étant le numéro frame
list = [] # tableau contenant le listing des valeurs du widget cible Entry
def get_Qgr(event, obj):
global var_somme
global somme
print("get_Qgr -- obj : ", obj, " ", obj.get(), type(obj.get()))
print("liste des variables", variables) # exemple : [<tkinter.IntVar object at 0x02344090>, <tkinter.IntVar object at 0x02344310>]
list.append(int(obj.get()))
somme = 0
for u in range(0, len(list)):
somme = somme + list[u]
print("somme get_Qgr ", somme)
var_somme.set(somme)
def removeLabel(frame, var):
for u in range(0, len(variables)):
if var == variables[u]:
print("u - Index de la quantité à supprimer",u)
del list[u]
print("list des quantités ", list)
somme = 0
for u in range(0, len(list)):
somme = somme + list[u]
print("somme removeLabel", somme)
var_somme.set(somme)
frame.destroy()
ix = variables.index(var) # identifie le numéro frame à supprimer
print("ix", ix)
variables.pop(ix) # Enlève de la liste l'élément situé à la position indiquée et le renvoie en valeur de retour.
# Mise à jour de l'indexation var des frame
for i, v in enumerate(variables[ix:], start=ix): # la position et la valeur correspondante sont récupérées
print("variables[ix:]",variables[ix:])
v.set(i)
print("v.get()", v.get())
print("variables", variables)
print("frame list", frame)
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)
Input_gr = ""
Entry(new_frame, text="").grid(row=0, column=1)
Input_gr = new_frame.winfo_children()[1] # référencement de l'objet Entry
for i in range(2, 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()
Input_gr.bind("<Tab>", lambda event, obj=Input_gr: get_Qgr(event, obj)) # Touche TAB
if __name__ == '__main__':
root = Tk()
var_somme = StringVar()
somme = 0
frame = Frame(root)
c = Button(root, text="add label", command=lambda: addNewLabel(frame))
c.grid(column=0, row=0)
b = Label(root, textvariable=var_somme)
b.grid(row=0, column=1)
b.config(foreground="red")
frame.grid(row=1, column=1)
root.mainloop() |