|
|
|
#26 |
|
Messages: n/a
Hébergeur: |
On Fri, 24 Aug 2007 14:27:21 +0200, <firelink.east@gmail.com> wrote:
[snip] > lorsque je met le code , le son se joue dès le lancement , et > lorsqu'on click sur le bouton il ne se joue pas du tout > > par exemple : > > > > root.title("Foule controle") > root.geometry("157x138") > f1 = Frame(root, width=78 , height= 138, bg="",bd=4 ) > f1.pack(side = LEFT) > bou1=Button(f1, width =6,height=1, > text='Aaah',command=playsound(path_sound , Aaah) A part qu'il manque une parenthèse fermante - merci de faire un copier/coller du *vrai* code, et pas de le réécrire... -, le comportement que tu vois est tout à fait normal: quand tu crées le bouton, tu *appelles* la fonction playsound en lui passant les paramètres path_sound et Aaah, puis tu affectes la valeur *renvoyée* par la fonction à l'option command du bouton. Vu que la fonction ne renvoie probablement rien, donc None, tu as un bouton qui ne fait rien. Par contre, la fonction playsound étant appelée, le son est joué à la création du bouton. Pour faire ce que tu veux, il faut: - Soit faire une fonction par son à jouer, sans paramètre, et passer le nom de la fonction *sans parenthèses* à l'option command du bouton. Exemple: def playAaah(): playsound(path_sound, Aaah) bou1=Button(f1, width =6,height=1,text='Aaah',command=playAaah) - Soit utiliser lambda: bou1=Button(f1, width =6,height=1,text='Aaah',command=lambda: playsound(path_sound , Aaah)) Attention: ça pose souvent des problèmes d'espace de noms (grosso modo, le lambda ne voit que les définitions globales, pas les locales) - Soit utiliser les possibilités des dernières versions de Python pour la programmation fonctionnelle. Etant scotché avec un Python 2.1, je ne connais pas bien; je préfère que d'autres expliquent... HTH -- python -c "print ''.join([chr(154 - ord(c)) for c in 'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])" |
|
|
|
#27 |
|
Messages: n/a
Hébergeur: |
On Fri, 24 Aug 2007 14:27:21 +0200, <firelink.east@gmail.com> wrote:
[snip] > lorsque je met le code , le son se joue dès le lancement , et > lorsqu'on click sur le bouton il ne se joue pas du tout > > par exemple : > > > > root.title("Foule controle") > root.geometry("157x138") > f1 = Frame(root, width=78 , height= 138, bg="",bd=4 ) > f1.pack(side = LEFT) > bou1=Button(f1, width =6,height=1, > text='Aaah',command=playsound(path_sound , Aaah) A part qu'il manque une parenthèse fermante - merci de faire un copier/coller du *vrai* code, et pas de le réécrire... -, le comportement que tu vois est tout à fait normal: quand tu crées le bouton, tu *appelles* la fonction playsound en lui passant les paramètres path_sound et Aaah, puis tu affectes la valeur *renvoyée* par la fonction à l'option command du bouton. Vu que la fonction ne renvoie probablement rien, donc None, tu as un bouton qui ne fait rien. Par contre, la fonction playsound étant appelée, le son est joué à la création du bouton. Pour faire ce que tu veux, il faut: - Soit faire une fonction par son à jouer, sans paramètre, et passer le nom de la fonction *sans parenthèses* à l'option command du bouton. Exemple: def playAaah(): playsound(path_sound, Aaah) bou1=Button(f1, width =6,height=1,text='Aaah',command=playAaah) - Soit utiliser lambda: bou1=Button(f1, width =6,height=1,text='Aaah',command=lambda: playsound(path_sound , Aaah)) Attention: ça pose souvent des problèmes d'espace de noms (grosso modo, le lambda ne voit que les définitions globales, pas les locales) - Soit utiliser les possibilités des dernières versions de Python pour la programmation fonctionnelle. Etant scotché avec un Python 2.1, je ne connais pas bien; je préfère que d'autres expliquent... HTH -- python -c "print ''.join([chr(154 - ord(c)) for c in 'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])" |
|
|
|
#28 |
|
Messages: n/a
Hébergeur: |
firelink.east@gmail.com wrote:
>> En général je fais quelque chose comme ça personnellement : >> >> script_dir = sys.path[0] >> my_path = './datas/file.png' >> >> my_path = script_dir + my_path[1:].replace('/', os.sep) > > pas tout saisi le point ne désigne pas un répértoire caché ? sans > point cela désignerait la racine .. > le point désigne le répertoire courant mais c'est surtout une syntaxe que je suis, j'aurais tout aussi bien pu mettre 'local://' à la place. En gros tu peux définir tes chemins localement par rapport à l'emplacement du script que tu lances et remplacer ce '.' par le 'sys.path[0]'. Cela te donne un chemin global correct que tu peux utiliser pendant toute l'exécution du programme. |
|
|
|
#29 |
|
Messages: n/a
Hébergeur: |
firelink.east@gmail.com wrote:
>> En général je fais quelque chose comme ça personnellement : >> >> script_dir = sys.path[0] >> my_path = './datas/file.png' >> >> my_path = script_dir + my_path[1:].replace('/', os.sep) > > pas tout saisi le point ne désigne pas un répértoire caché ? sans > point cela désignerait la racine .. > le point désigne le répertoire courant mais c'est surtout une syntaxe que je suis, j'aurais tout aussi bien pu mettre 'local://' à la place. En gros tu peux définir tes chemins localement par rapport à l'emplacement du script que tu lances et remplacer ce '.' par le 'sys.path[0]'. Cela te donne un chemin global correct que tu peux utiliser pendant toute l'exécution du programme. |
|
|
|
#30 |
|
Messages: n/a
Hébergeur: |
On 24 août, 14:40, "Eric Brunel" <see.signat...@no.spam> wrote:
> On Fri, 24 Aug 2007 14:27:21 +0200, <firelink.e...@gmail.com> wrote: > > [snip] > > > lorsque je met le code , le son se joue dès le lancement , et > > lorsqu'on click sur le bouton il ne se joue pas du tout > > > par exemple : > > > root.title("Foule controle") > > root.geometry("157x138") > > f1 = Frame(root, width=78 , height= 138, bg="",bd=4 ) > > f1.pack(side = LEFT) > > bou1=Button(f1, width =6,height=1, > > text='Aaah',command=playsound(path_sound , Aaah) > > A part qu'il manque une parenthèse fermante - merci de faire un > copier/coller du *vrai* code, et pas de le réécrire... -, c'est un mauvais copier / coller vers le newsgroup , les parenthèses y sont dans le code .. le comportement > que tu vois est tout à fait normal: quand tu crées le bouton, tu > *appelles* la fonction playsound en lui passant les paramètres path_sound > et Aaah, puis tu affectes la valeur *renvoyée* par la fonction à l'option > command du bouton. Vu que la fonction ne renvoie probablement rien, donc > None, tu as un bouton qui ne fait rien. Par contre, la fonction playsound > étant appelée, le son est joué à la création du bouton. > > Pour faire ce que tu veux, il faut: > > - Soit faire une fonction par son à jouer, sans paramètre, et passer le > nom de la fonction *sans parenthèses* à l'option command du bouton. > Exemple: > def playAaah(): > playsound(path_sound, Aaah) > bou1=Button(f1, width =6,height=1,text='Aaah',command=playAaah) c'est quasi identique au code de départ mis à part le path_sound definie avant non ? > - Soit utiliser lambda: > bou1=Button(f1, width =6,height=1,text='Aaah',command=lambda: > playsound(path_sound , Aaah)) > Attention: ça pose souvent des problèmes d'espace de noms (grosso modo, > le lambda ne voit que les définitions globales, pas les locales) > alors j'ai ajouter : global Aaahh ainsi que le code lambda , il me dit que Aaahh n'est pas définit .. |
|
|
|
#31 |
|
Messages: n/a
Hébergeur: |
On 24 août, 14:40, "Eric Brunel" <see.signat...@no.spam> wrote:
> On Fri, 24 Aug 2007 14:27:21 +0200, <firelink.e...@gmail.com> wrote: > > [snip] > > > lorsque je met le code , le son se joue dès le lancement , et > > lorsqu'on click sur le bouton il ne se joue pas du tout > > > par exemple : > > > root.title("Foule controle") > > root.geometry("157x138") > > f1 = Frame(root, width=78 , height= 138, bg="",bd=4 ) > > f1.pack(side = LEFT) > > bou1=Button(f1, width =6,height=1, > > text='Aaah',command=playsound(path_sound , Aaah) > > A part qu'il manque une parenthèse fermante - merci de faire un > copier/coller du *vrai* code, et pas de le réécrire... -, c'est un mauvais copier / coller vers le newsgroup , les parenthèses y sont dans le code .. le comportement > que tu vois est tout à fait normal: quand tu crées le bouton, tu > *appelles* la fonction playsound en lui passant les paramètres path_sound > et Aaah, puis tu affectes la valeur *renvoyée* par la fonction à l'option > command du bouton. Vu que la fonction ne renvoie probablement rien, donc > None, tu as un bouton qui ne fait rien. Par contre, la fonction playsound > étant appelée, le son est joué à la création du bouton. > > Pour faire ce que tu veux, il faut: > > - Soit faire une fonction par son à jouer, sans paramètre, et passer le > nom de la fonction *sans parenthèses* à l'option command du bouton. > Exemple: > def playAaah(): > playsound(path_sound, Aaah) > bou1=Button(f1, width =6,height=1,text='Aaah',command=playAaah) c'est quasi identique au code de départ mis à part le path_sound definie avant non ? > - Soit utiliser lambda: > bou1=Button(f1, width =6,height=1,text='Aaah',command=lambda: > playsound(path_sound , Aaah)) > Attention: ça pose souvent des problèmes d'espace de noms (grosso modo, > le lambda ne voit que les définitions globales, pas les locales) > alors j'ai ajouter : global Aaahh ainsi que le code lambda , il me dit que Aaahh n'est pas définit .. |
|
|
|
#32 |
|
Messages: n/a
Hébergeur: |
firelink.east@gmail.com wrote:
> On 24 août, 14:40, "Eric Brunel" <see.signat...@no.spam> wrote: >> On Fri, 24 Aug 2007 14:27:21 +0200, <firelink.e...@gmail.com> wrote: >> >> [snip] >> >>> lorsque je met le code , le son se joue dès le lancement , et >>> lorsqu'on click sur le bouton il ne se joue pas du tout >>> par exemple : >>> root.title("Foule controle") >>> root.geometry("157x138") >>> f1 = Frame(root, width=78 , height= 138, bg="",bd=4 ) >>> f1.pack(side = LEFT) >>> bou1=Button(f1, width =6,height=1, >>> text='Aaah',command=playsound(path_sound , Aaah) >> A part qu'il manque une parenthèse fermante - merci de faire un >> copier/coller du *vrai* code, et pas de le réécrire... -, > > c'est un mauvais copier / coller vers le newsgroup , les parenthèses y > sont dans le code .. > > le comportement >> que tu vois est tout à fait normal: quand tu crées le bouton, tu >> *appelles* la fonction playsound en lui passant les paramètres path_sound >> et Aaah, puis tu affectes la valeur *renvoyée* par la fonction à l'option >> command du bouton. Vu que la fonction ne renvoie probablement rien, donc >> None, tu as un bouton qui ne fait rien. Par contre, la fonction playsound >> étant appelée, le son est joué à la création du bouton. >> >> Pour faire ce que tu veux, il faut: >> >> - Soit faire une fonction par son à jouer, sans paramètre, et passer le >> nom de la fonction *sans parenthèses* à l'option command du bouton. >> Exemple: >> def playAaah(): >> playsound(path_sound, Aaah) >> bou1=Button(f1, width =6,height=1,text='Aaah',command=playAaah) > > c'est quasi identique au code de départ mis à part le path_sound > definie avant non ? Si tu fais comme ça oui. Mais tu limites les erreurs de copier/coller (cf ta fonction Cool dans ton post précédent )> > > >> - Soit utiliser lambda: >> bou1=Button(f1, width =6,height=1,text='Aaah',command=lambda: >> playsound(path_sound , Aaah)) > > >> Attention: ça pose souvent des problèmes d'espace de noms (grosso modo, >> le lambda ne voit que les définitions globales, pas les locales) >> alors j'ai ajouter : > > global Aaahh > > ainsi que le code lambda , il me dit que Aaahh n'est pas définit .. global c'est le mal... Avec le code que je t'ai proposé tu dois faire plutôt : aaah_fun = lambda:playsound(path_sound , 'Aaah') bou1=Button(f1, width =6,height=1,text='Aaah',command=aaah_fun) |
|
|
|
#33 |
|
Messages: n/a
Hébergeur: |
firelink.east@gmail.com wrote:
> On 24 août, 14:40, "Eric Brunel" <see.signat...@no.spam> wrote: >> On Fri, 24 Aug 2007 14:27:21 +0200, <firelink.e...@gmail.com> wrote: >> >> [snip] >> >>> lorsque je met le code , le son se joue dès le lancement , et >>> lorsqu'on click sur le bouton il ne se joue pas du tout >>> par exemple : >>> root.title("Foule controle") >>> root.geometry("157x138") >>> f1 = Frame(root, width=78 , height= 138, bg="",bd=4 ) >>> f1.pack(side = LEFT) >>> bou1=Button(f1, width =6,height=1, >>> text='Aaah',command=playsound(path_sound , Aaah) >> A part qu'il manque une parenthèse fermante - merci de faire un >> copier/coller du *vrai* code, et pas de le réécrire... -, > > c'est un mauvais copier / coller vers le newsgroup , les parenthèses y > sont dans le code .. > > le comportement >> que tu vois est tout à fait normal: quand tu crées le bouton, tu >> *appelles* la fonction playsound en lui passant les paramètres path_sound >> et Aaah, puis tu affectes la valeur *renvoyée* par la fonction à l'option >> command du bouton. Vu que la fonction ne renvoie probablement rien, donc >> None, tu as un bouton qui ne fait rien. Par contre, la fonction playsound >> étant appelée, le son est joué à la création du bouton. >> >> Pour faire ce que tu veux, il faut: >> >> - Soit faire une fonction par son à jouer, sans paramètre, et passer le >> nom de la fonction *sans parenthèses* à l'option command du bouton. >> Exemple: >> def playAaah(): >> playsound(path_sound, Aaah) >> bou1=Button(f1, width =6,height=1,text='Aaah',command=playAaah) > > c'est quasi identique au code de départ mis à part le path_sound > definie avant non ? Si tu fais comme ça oui. Mais tu limites les erreurs de copier/coller (cf ta fonction Cool dans ton post précédent )> > > >> - Soit utiliser lambda: >> bou1=Button(f1, width =6,height=1,text='Aaah',command=lambda: >> playsound(path_sound , Aaah)) > > >> Attention: ça pose souvent des problèmes d'espace de noms (grosso modo, >> le lambda ne voit que les définitions globales, pas les locales) >> alors j'ai ajouter : > > global Aaahh > > ainsi que le code lambda , il me dit que Aaahh n'est pas définit .. global c'est le mal... Avec le code que je t'ai proposé tu dois faire plutôt : aaah_fun = lambda:playsound(path_sound , 'Aaah') bou1=Button(f1, width =6,height=1,text='Aaah',command=aaah_fun) |
|
|
|
#34 |
|
Messages: n/a
Hébergeur: |
Jerome a écrit :
> firelink.east@gmail.com wrote: >>> En général je fais quelque chose comme ça personnellement : >>> >>> script_dir = sys.path[0] >>> my_path = './datas/file.png' >>> >>> my_path = script_dir + my_path[1:].replace('/', os.sep) >> >> pas tout saisi le point ne désigne pas un répértoire caché ? sans >> point cela désignerait la racine .. >> > > le point désigne le répertoire courant mais c'est surtout une syntaxe > que je suis, j'aurais tout aussi bien pu mettre 'local://' à la place. > > En gros tu peux définir tes chemins localement par rapport à > l'emplacement du script que tu lances et remplacer ce '.' par le > 'sys.path[0]'. Cela te donne un chemin global correct que tu peux > utiliser pendant toute l'exécution du programme. modulo qu'il ne modifie pas le répertoire courant au cours de l'exécution... il vaut mieux utiliser dès l'initialisation du script abspath() pour transformer le répertoire relatif en répertoire absolu et être tranquille par la suite. Voir aussi la variable __file__ qui contient le nom du fichier module courant (je la préfère à sys.argv[0]). Pour tester: import sys from os.path import abspath print sys.argv[0] print abspath(sys.argv[0]) print __file__ print abspath(__file__) Enfin, comme ça a déjà été dit, préférer de loin l'utilisation des fonctions join, split, basename, dirname... du module os.path plutôt que de faire des concaténations de . / \ à la mano. C'est plus portable, plus propre, et moins sujet à erreurs. Cf http://docs.python.org/lib/module-os.path.html A+ Laurent. |
|
|
|
#35 |
|
Messages: n/a
Hébergeur: |
Jerome a écrit :
> firelink.east@gmail.com wrote: >>> En général je fais quelque chose comme ça personnellement : >>> >>> script_dir = sys.path[0] >>> my_path = './datas/file.png' >>> >>> my_path = script_dir + my_path[1:].replace('/', os.sep) >> >> pas tout saisi le point ne désigne pas un répértoire caché ? sans >> point cela désignerait la racine .. >> > > le point désigne le répertoire courant mais c'est surtout une syntaxe > que je suis, j'aurais tout aussi bien pu mettre 'local://' à la place. > > En gros tu peux définir tes chemins localement par rapport à > l'emplacement du script que tu lances et remplacer ce '.' par le > 'sys.path[0]'. Cela te donne un chemin global correct que tu peux > utiliser pendant toute l'exécution du programme. modulo qu'il ne modifie pas le répertoire courant au cours de l'exécution... il vaut mieux utiliser dès l'initialisation du script abspath() pour transformer le répertoire relatif en répertoire absolu et être tranquille par la suite. Voir aussi la variable __file__ qui contient le nom du fichier module courant (je la préfère à sys.argv[0]). Pour tester: import sys from os.path import abspath print sys.argv[0] print abspath(sys.argv[0]) print __file__ print abspath(__file__) Enfin, comme ça a déjà été dit, préférer de loin l'utilisation des fonctions join, split, basename, dirname... du module os.path plutôt que de faire des concaténations de . / \ à la mano. C'est plus portable, plus propre, et moins sujet à erreurs. Cf http://docs.python.org/lib/module-os.path.html A+ Laurent. |
|
![]() |
| Outils de la discussion | |
|
|