Hello,

Dans le code ci-dessous, j'ai un Slider associé à une variable TK qui doit servir d'index pour rafraichir l'affichage d'un libellé dans une liste. L'idée est d'utiliser la méthode trace des variable Tk mais apparemment on ne peut pas leur passer de paramètre à part les 3 normales, c'est à dire qu'une fonction lambda ne marche pas ici. Quand on appelle la fonction noteTranslate à la main avec les bons paramètres elle fonctionne. Mais je ne sais pas trop comment indiquer les paramètres à la méthode trace, puisque qu'elle n'accepte pas une fonction lambda... Une idée???

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
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import sys
 
if sys.version_info[0] < 3:
    import Tkinter as gui
else:
    import tkinter as gui
 
MIDI_NOTE_LABEL=[]
#populating the list
for x in range(128):
    note = x % 12
    stave = (x / 12) - 2
    label = "%s%u"%(("do", "do#", "re", "re#", "mi", "fa", "fa#", "sol", "sol#", "la", "la#", "si")[note], stave)
    MIDI_NOTE_LABEL.append(label)
 
def noteTranslate(note_var, label_var):
    print(note_var.get())
    label_var.set(MIDI_NOTE_LABEL[note_var.get()])
 
def addNoteBox(container, note_var):
    frm = gui.Frame(container)
    text_var = gui.StringVar()
    gui.Label  (frm, textvariable=text_var ,width=10, bg="white").grid(row=0, column=0)
    gui.Scale(frm, from_=0, to=127, orient="horizontal", length=256,variable=note_var).grid(row=0, column=1)
    note_var.trace("w", lambda arg1=note_var:noteTranslate(note_var))
    noteTranslate(note_var, text_var)
    frm.grid()
 
win = gui.Tk()
note_vars = []
for x in range(8):
    note_var = gui.IntVar(value=x)
    addNoteBox(win, note_var)
    note_vars.append(note_var)
win.mainloop()
A+

Pfeuh