Bonjour à tous,
Le bout de code ci-après construit 5 Listbox et 5 Labels qui reçoivent chacun le choix de la Listbox correspondante.
L’idée était d’afficher directement sans valider par le bouton c’est-à-dire au clic dans chaque liste.
Tkinter renvoie une erreur que je n’arrive pas à contourner.
Si quelqu’un a une idée, merci d’avance.
L.PNom : ListBox_Labels.jpg
Affichages : 103
Taille : 17,1 Ko
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
 
# essai de construction auto de listbox 01
from tkinter import*
 
class Listes:
    def __init__(self):
        self.elements = []
 
    def add_element(self, element, name):
        for i, item in enumerate(element):
            name.insert(END, element[i])
 
    def choix_element(self, name): # ne fonctionne pas sans valider par le bouton
        choix_list=name.get(name.curselection())
        print(str(name)[1:], choix_list, str(name)[6:7])
        etiquettes[int(str(name)[6:7])].config(text=choix_list)
 
def build_et_place_Lbx(fen): # construction et placement de n listbox vides
    global lists
    lists=[]
    for i in range(5):
        list = Listbox(fen, width=8, height=6, name='list[' + str(i) + ']')
        list.place(x= 10 + i * 80, y= 20 )
        lists.append(list)
 
def build_et_place_Etq(fen): # construction et placement de n Labels vides
    global etiquettes
    etiquettes=[]
    for i in range(5):
        etiquette = Label(fen, text= '........',font=('"Consolas" 8'),)
        etiquette.place(x= 8 + i * 80, y= 120 )
        etiquettes.append(etiquette)
 
def choix(): # actionné par le bouton pour essai
    for w in lists:
        if w.focus_get()==w:
            f=(str(w)[6:7]) # ne convient que si le nb de listes est <= 10 !
##            print(w, f)
    lists[int(f)].bind("<<ListboxSelect>>", li.choix_element(lists[int(f)]))
 
#---
fen= Tk()
fen.geometry ("400x200+1000+600")
bt=Button(fen, text='choix', command= choix); bt.pack()
f=0
lt0=('Azerty', 'Defagu', 'Getidos')
lt1=('vytum', 'dgbclo', 'vbj45', 'dpoke')
lt2=(12345, 45678, 12.56, 0.45, -165.125)
lt3=('fvchux', 'hjbvd', 'fgjion')
lt4=('',)
 
##lt0=()
##lt1=()
##lt2=()
##lt3=()
##lt4=()
 
build_et_place_Lbx(fen)
build_et_place_Etq(fen)
 
li=Listes()
li.add_element(lt0, lists[0])
li.add_element(lt1, lists[1])
li.add_element(lt2, lists[2])
li.add_element(lt3, lists[3])
li.add_element(lt4, lists[4])
 
# J’aurai voulu écrire quelque chose comme ça :
#lists[0].bind("<<ListboxSelect>>", li.choix_element(lists[0])) # ne fonctionne pas ?
 
fen.mainloop()