merci pour l'info
bonne journée
merci pour l'info
bonne journée
Bonjour,
Je vais essayé d'être le plus clair possible dans les explications du problème. Merci de votre compréhension. (j'ai aussi réduit au maximum le code)
Une fois les quantités ajoutées à chacun des Entry généré automatiquement, je mets en place un event_generate sur la touche TAB.
Seul le dernier Entry généré affiche un résultat suite à l'event_generate.
J'ai donc, posé un 'break', par exemple au 2ème Entry. Le résultat est correcte.
J'en déduit que la boucle event_generate fonctionne mais n'affiche que la dernière opération.
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142 # ================================================== # TreeView Recettes - Rec_list # ================================================== # --- Insertion Table Nom HV dans TreeView def DisplayData_Recette(): for i in Recette_DB_BackEnd.loadRecord(): Rec_list.insert('', 'end', text=i[0], values=(i[0])) # --- Insertion Scrollbar scrollbar_y = Scrollbar(F_TOP_Treeview, orient='vertical') # Ascenseur Vertical scrollbar_y.place(x=1786, y=24, height=169) Rec_list = ttk.Treeview(F_TOP_Treeview, selectmode="browse", columns=(1), show="headings", yscrollcommand=scrollbar_y.set) Rec_list.place(x=1502, y=2, width=285, height=175) scrollbar_y.config(command=Rec_list.yview) # Ascenseur Vertical DisplayData_Recette() # ================================================== # SelectItem_Recettes # ================================================== def Clear_frameSelected(): # Supprime toutes HV sélectionnées dans FrameCalc - frame global Clear_var_suite Clear_var_suite = 1 for i in range(0, len(var_suite)): var1 = var_suite[i] removeLabel(var1) var_suite[:] = [] # Vide liste var_suite def selectionItem_Recette(a): Clear_frameSelected() # === [Sélection - Widget Treeview Recette] === global Liste Liste = [] Nom_Rec = StringVar() Name_HV = StringVar() Qt_Name_HV = DoubleVar() curItem = Rec_list.focus() Liste = Rec_list.item(curItem)["values"] Nom_Rec.set(Liste[0]) # Variable Nom HV - 1er élément du tableau Liste # print("Nom_Rec --> ", Nom_Rec.get()) # === [Recensement Nom HV selon sélection effecttué dans Table] === for row in Recette_DB_BackEnd.searchDataTable(Nom_Rec.get()): Name_HV.set(row[2]) Qt_Name_HV.set(row[3]) Display_HV(Name_HV, Qt_Name_HV) test() # ================================================== # Evénement Treeview HElist - Auto Sélection # ================================================== def Display_HV(Name_HV, Qt_Name_HV): global L_Nom_HV z = -1 F_TOP_Treeview_ID.event_add('<<Declenche>>', '<ButtonRelease-1>') F_TOP_Treeview_ID.after(1000, lambda: F_TOP_Treeview_ID.event_generate('<<Declenche>>')) for item in F_TOP_Treeview_ID.get_children(): z = z +1 Ligne_HElist = [] Ligne_HElist.append(F_TOP_Treeview_ID.item(item)["values"]) # Liste HV de la recette cible if Name_HV.get() == Ligne_HElist[0][1]: L_Nom_HV.append(Name_HV.get()) iid = F_TOP_Treeview_ID.get_children()[z] F_TOP_Treeview_ID.focus(iid) F_TOP_Treeview_ID.selection_set(iid) frame = F_TOP_Treeview_ID.get_children()[z] F_TOP_Treeview_ID.bind('<<Declenche>>', selectItem(frame)) valeur_qt = Qt_Name_HV.get() Input_gr.insert(0, valeur_qt) # Insertion des quantités correspondnates à chacune des HV Input_gr.config(foreground="red") def test(): m = List_Input_gr[0] m.event_add('<<Declenche0>>', '<KeyRelease-Tab>') j = 0 for kt in range(0, len(List_Input_gr)): m = List_Input_gr[kt] nom = L_Nom_HV[kt] Qpourc = List_Qpourc[kt] INSp = List_INSp[kt] IODEp = List_IODEp[kt] SC = List_SC[kt] HD = List_HD[kt] iHD = List_iHD[kt] CD = List_CD[kt] iCD = List_iCD[kt] CH = List_CH[kt] iCH = List_iCH[kt] BM = List_BM[kt] iBM = List_iBM[kt] CC = List_CC[kt] iCC = List_iCC[kt] La = List_La[kt] iLa = List_iLa[kt] M = List_M[kt] iM = List_iM[kt] P = List_P[kt] iP = List_iP[kt] S = List_S[kt] iS = List_iS[kt] CH18 = List_CH18[kt] iCH18 = List_iCH18[kt] O = List_O[kt] iO = List_iO[kt] L = List_L[kt] iL = List_iL[kt] Ln = List_Ln[kt] iLn = List_iLn[kt] Prix_gr = List_Prix_gr[kt] print("- ID_Entry --> ", m, " Nom Entry --> ", Entry, " Nom HV --> ", nom) Entry.focus_force(m) Entry.focus_set(m) j = j + 1 m.after(0, lambda: m.event_generate('<<Declenche0>>')) m.bind('<<Declenche0>>', lambda event, obj=m: Qgr(event, obj, nom, Qpourc, INSp, IODEp, SC, HD, iHD, CD, iCD, CH, iCH, BM, iBM, CC, iCC, La, iLa, M, iM, P, iP, S, iS, CH18, iCH18, O, iO, L, iL, Ln, iLn, Prix_gr)) print("j",j, m) for keyNameEvent in m.event_info(): # print("keyNameEvent", keyNameEvent) print("m.event_info('<<Declenche0>>')", m.event_info('<<Declenche0>>')) if j > 2: break def Qgr(event, obj, nom, Qpourc, INSp, IODEp, SC, HD, iHD, CD, iCD, CH, iCH, BM, iBM, CC, iCC, La, iLa, M, iM, P, iP, S, iS, CH18, iCH18, O, iO, L, iL, Ln, iLn, Prix_gr): ...
avez-vous une idée? s'agit-il de FocusIn FocusOut
merci pour votre temps
Salut,
Si vous voulez illustrer une interaction entre 2 Entry et 1 Treeview, écrivez un code qui se limite à... et non 150 lignes qui ne permettent pas de reproduire quoi que ce soit et qui sont difficiles à lire.
Par exemple quand je lis:
Déjà, je tique sur l'event_add. Ca peut être utile pour définir un évènement virtuel associé à plusieurs events, si c'est juste '<ButtonRelease-1>' on peut s'en passer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 F_TOP_Treeview_ID.event_add('<<Declenche>>', '<ButtonRelease-1>') F_TOP_Treeview_ID.after(1000, lambda: F_TOP_Treeview_ID.event_generate('<<Declenche>>'))
Ensuite vous connaissez le callback qui sera appelé lorsque ButtonRelease-1 survient autant le passer directement:
- W
Code : Sélectionner tout - Visualiser dans une fenêtre à part F_TOP_Treeview_ID.after(1000, callback)
le 1er. événement est associé à un Treeview et
le 2ème. événement à un Entry d'une frame générée
pour faire, simple, je cherche à appliquer un event_generate sur plusieurs Entry. Il faut identifier chacun d'eu pour appliquer cet événement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 m.event_add('<<Declenche0>>', '<KeyRelease-Tab>') ... m.after(0, lambda: m.event_generate('<<Declenche0>>')) m.bind('<<Declenche0>>', lambda event, obj=m: Qgr(event, obj, nom, Qpourc, INSp, IODEp, SC, HD, iHD, CD, iCD, CH, iCH, BM, iBM, CC, iCC, La, iLa, M, iM, P, iP, S, iS, CH18, iCH18, O, iO, L, iL, Ln, iLn, Prix_gr))
Je ne vois pas trop en quoi ces précisions aident.
Ceci dit, je ne suis pas le seul à lire vos messages. Si çà inspire des idées à quelqu'un, il se manifestera un jour ou l'autre.
En attendant, bon courage.
- W
merci. bonne journée
voici un exemple simple depuis un bouton:
seul le dernier Entry (m) est Traité:
m_in .!toplevel.labels.!frame2.entry_4
m_in .!toplevel.labels.!frame6.entry_4
m_in .!toplevel.labels.!frame10.entry_4
m_in .!toplevel.labels.!frame14.entry_4
m_in .!toplevel.labels.!frame18.entry_4
m_in .!toplevel.labels.!frame22.entry_4
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 def dosomething(event, m): print("OUI") # m.focus_set() # m.focus() m.delete(0, END) m.after(1, lambda: m.focus_set()) def testy(): m = List_Input_gr[0] m.event_add('<<Declenche0>>', '<KeyRelease-Tab>') for kt in range(0, len(List_Input_gr)): m = List_Input_gr[kt] print("m_in", m) m.after(0, lambda: m.event_generate('<<Declenche0>>')) m.bind('<<Declenche0>>', lambda event: dosomething(event, m)) b1 = Button(FrameCalc, text="ttttttttt", command=testy) b1.grid(row=30, column=1)
Oui mais çà c'est parce que vous fabriquez vos lambda dans une boucle...
Et çà n'a rien à voir avec event_generate...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for kt in range(0, len(List_Input_gr)): m = List_Input_gr[kt] print("m_in", m) m.after(0, lambda: m.event_generate('<<Declenche0>>')) m.bind('<<Declenche0>>', lambda event, m=m: dosomething(event, m))
- W
bizzare, cela fonctionne ceci
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 def dosomething(event, m): # m.focus_set() # m.focus() print("m -->1 ", m) m.delete(0, END) m.after(10, lambda: m.focus_set()) print("OUI_1", event.widget) # Identification du widget cible def testy(): m = List_Input_gr[0] m.event_add('<<Declenche0>>', '<KeyRelease-Tab>') # m.after(1, lambda m=m: m.event_generate('<<Declenche0>>')) for kt in range(0, len(List_Input_gr)): m = List_Input_gr[kt] print("m --> ", m) m.after(1, lambda m=m: m.event_generate('<<Declenche0>>')) m.bind('<<Declenche0>>', lambda event, m=m: dosomething(event, m))
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager