Bonjour,
Lorsque je travaillais j'ai développés des interfaces Python/Tk pour générer le fichier des paramètres de calcul de logiciels de simulation ( une cinquarantaine de paramètres dont plus de 30 noms de fichiers de données indispensables au logiciel ) et l'exploitation des fichiers de résultat. C'étaient donc des interfaces comtenant des centaines d'instruction et utilisant toute la puissance de Python et des widgets Tk.
Maintenant je développe un projet personnel modeste et suit confronté au comportement surprenant d'un simple Bouton Tk: La commande associée au bouton est exécutée une seule fois lors de la création du bouton et jamais lorsque l'on clique sur lui bien qu'il soit affiché, actif, et que son apparence change lors du clic.
De plus la fonction associée au bouton est de type "type(imprime) =<class 'function''>" avant la création du bouton, puis lors de la création du bouton qui étonnament l'exécute immédiatement "function imprime at 0x000027F72F13F60>', une adresse normale, et après la création du bouton devient "type(imprime) = <class 'NoneType')> None".
Voici un tout petit script Python de démonstation :
et les messages lors de son exécution:
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 # python 3.13 (64-bit) # tclk86-8.6.7-0 import tkinter def imprime(texte , niveau = 4 ): print(' 7 module14.imprime impression du texte = ' , texte , ' niveau = ' , niveau , imprime ) root = tkinter.Tk() root.width=250 root.heigt=100 texte = ' wwww ' niveau = -2 print(' 15 module14 avant création du bouton imprime qui appelle imprime ' , ' type(imprime) = ' , type(imprime) ) imprime= tkinter.Button( root , text=" création de imprime l16 " , command = imprime( texte , niveau=niveau)).place(x=00 , y=50) print(' 17 module14 après création du bouton imprime qui appelle imprime type(imprime) = ' , type(imprime) , imprime ) root.mainloop()
15 module14 avant création du bouton imprime qui appelle imprime type(imprime) = <class 'function'>
7 module14.imprime impression du texte = wwww niveau = -2 <function imprime at 0x000001305E143F60>
17 module14 après création du bouton imprime qui appelle imprime type(imprime) = <class 'NoneType'> None
Toute aide sera la bienvenue
Partager