Se connecter / S'enregistrer
Votre question

programmation graphique linux

Tags :
  • linux
  • Programmation
Dernière réponse : dans Programmation
29 Avril 2006 19:18:10

bonjour

j'ai créer ce petit programme en shell et je voudrai maintenant essayer de lui donner une interphace graphique simple. En kler créer un bouton pour chaque radio et quand je click sur un bouton sa me lance la radio ... sa mévitera a chaque foi de tapé le nombre de la radio ..

Si quelqu'un a une idée pour modifier mon script pour pouvoir changer de radio s'en redemarer le programme sa sera pas mal aussi

merci

#!/bin/sh
mplayer="`which mplayer` -cache 256 -ao alsa -vc dummy -vo null"
mplayervideo="`which mplayer` -cache 256 -vo xv"
echo -e '\033[36;40m' && clear
echo -e "\033[1;31m"
cat << EOF

Radio Corse | Radio National | Radio House-Music |
----------- | -------------- | ----------------- |
| | |
6) Alta Frequenza | 1) Cherie FM | 7) Radio FG |
9) Radio Corti Vivu | 2) Fun Radio | 8) Radio FG Underground |
10) RCFM | 3) NrJ | 11) WwW.di.fm : House |
| 4) Nostalgie | |
| 5) Le Mouv' | |



EOF
echo -e "\033[1;37m"
echo -n "Quelle radio écouter [defaut : 1] ?> "
read num
[ "$num" = "" ] && num=1
echo -e "\033[1;36m"
case $num in
"1" ) $mplayer mms://vip1.yacast.fr/encodercheriefm ;;
"2" ) $mplayer mms://vip2.yacast.fr/encoderfun ;;
"3" ) $mplayer mms://vip1.yacast.fr/encodernrj ;;
"4" ) $mplayer mms://vip1.yacast.fr/encodernostalgie ;;
"5" ) $mplayer mms://viptvr.yacast.fr/encoderlemouv ;;
"6" ) $mplayer http://alta-frequenza.streamfr.com:8061/listen.pls ;;
"7" ) $mplayer http://87.98.197.99:8000 ;;
"8" ) $mplayer http://ufg.impek.tv ;;
"9" ) $mplayer rtsp://a1251.l252147863.c2521.e.lr.akamaistream.net/live/D/1251/2521/666/reflector:47863?site ;;
"10" ) $mplayer mms://wm02.tv-radio.com/fbfrequenzamora-16k?site;;
"11" ) $mplayer http://www.di.fm/mp3/house.pls
esac



Autres pages sur : programmation graphique linux

a b L Programmation
29 Avril 2006 19:45:37

Je n'ai jamais vu un programme shell pour du graphisme, car ce n'est pas son but. Peut-être que tu peux lancer un Tk et utiliser ces commandes, mais dans ce cas, autant programmer avec un autre langage de script tel que Tcl/Tk ou Python.
29 Avril 2006 19:53:44

mon but n'ai pas de faire du shell en graphique mais de traduire de script dans n'importe quel language pour pouvoir créer une interface graphique

au lieu de taper un numéro pour que le programme lise la radio que je veux

je voudrai juste avoir a clicker sur un bouton

mais je ne c pas quel language serai le plus approprier et surtout avec kel logiciel le faire et comment le faire
Contenus similaires
a b L Programmation
29 Avril 2006 20:37:45

Tu peux le faire en python avec tkinter.
29 Avril 2006 23:10:27

tu orai pas un tuto ki explike comment je pe faire
29 Avril 2006 23:24:11

jai réussi a créer un bouton mais jarrive pas a faire ke ken je clique il démarre mplayer et il me li mms://vip1.yacast.fr/encodercheriefm

comme ken je tape $mplayer mms://vip1.yacast.fr/encodercheriefm sous shell
30 Avril 2006 14:36:31

mais comment j'introduit cette commande dans la commande d'un bouton j'ai réussi a créer un bouton mais ken j'introduit la commande que tu ma donné il me dit syntax error ...

30 Avril 2006 16:26:54

j'ai créer l'interface graphique du programme que je voudrai, je c c très basique mais je mattarderai sur cette interface quand tous marchera ...

from Tkinter import *
root=Tk()

texte=Label(root, text="Radio National",fg="red")
texte.pack(side=TOP)

bouton=Button(root,text=' Cherie FM ', command=root.quit)
bouton.pack(side=TOP)


bouton2=Button(root,text=' Fun-Radio ', command=root.quit)
bouton2.pack(side=TOP)

bouton3=Button(root,text=' NrJ ', command=root.quit)
bouton3.pack(side=TOP)

bouton4=Button(root,text=' Nostalgie ', command=root.quit)
bouton4.pack(side=TOP)

bouton5=Button(root,text=' Le Mouv ', command=root.quit)
bouton5.pack(side=TOP)

texte=Label(root, text="Radio Corse",fg="red")
texte.pack(side=TOP)

bouton6=Button(root,text=' Alta Frequenza ', command=root.quit)
bouton6.pack(side=TOP)

bouton7=Button(root,text='Radio Corti Vivu', command=root.quit)
bouton7.pack(side=TOP)

bouton8=Button(root,text='RCFM', command=root.quit)
bouton8.pack(side=TOP)

texte=Label(root, text="Radio House-Music",fg="red")
texte.pack(side=TOP)

bouton9=Button(root,text='Radio FG', command=root.quit)
bouton9.pack(side=TOP)

bouton10=Button(root,text='Radio FG Underground', command=root.quit)
bouton10.pack(side=TOP)

bouton11=Button(root,text='WwW.di.fm : House', command=root.quit)
bouton11.pack(side=TOP)

root.mainloop()


Donc j'ai tous mes bouton et jai mis la commande quitter quand je click dessus pour tester si sa marcheai tous marche

maintenant j'aimerai pouvoir cliquer sur chaque bouton et que le programme me lance ladresse mplayer correspondant
a b L Programmation
30 Avril 2006 19:46:25

D'abord tu définis une fonction qui sera l'action du bouton:
  1. def maFonction():
  2. print "hello"


Ensuite, tu associes la fonction au bouton quand tu le crée. Par exemple:
  1. bouton=Button(root,text=' Cherie FM ', command=maFonction)


Et là, à chaque fois que tu cliqueras sur le bouton, la fonciton maFonction() sera appelée
30 Avril 2006 21:07:10

ok mais quel fonction me permettrai de pourvoir lancer mplayer pour pouvoir lire une adresse

a b L Programmation
30 Avril 2006 21:52:12

ben au lieu de faire un print, tu fais un os.system()
1 Mai 2006 13:22:15

j'ai défini la fonction comme ceci :

def maFonction():
os.system(mplayer mms://vip1.yacast.fr/encodercheriefm)

mais quand j'execute le programme il me dit syntax error
1 Mai 2006 13:35:34

j'ai changer la syntax et j'ai écrit la fonction comme ceci :

def maFonction():
os.system("mplayer mms://vip1.yacast.fr/encodercheriefm")


le programme ce lance bien j'ai l'interface graphique mais quand je click sur le bouton la console m'affiche :

Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.4/lib-tk/Tkinter.py", line 1345, in __call__
return self.func(*args)
File "programme1.py", line 4, in maFonction
os.system("mplayer mms://vip1.yacast.fr/encodercheriefm")
NameError: global name 'os' is not defined
a b L Programmation
1 Mai 2006 14:10:18

Pense à mettre l'indentation pour tout ce qui est dans la fonction, car python utilise l'indentation pour définir les blocks de code.
l'erreur te dit que "os" n'existe pas, c'est parce que tu n'as pas fait l'import de la lib correspondante.
ajoute en début:
  1. import os

1 Mai 2006 14:24:29

ha ok c bon le premier bouton marche

mais c'est quoi l'indentation ?? ( je sais je suis un newbie lol )

merci beaucoup de ton aide je v créer les autres bouton pour voir ce que sa donne ;) 
1 Mai 2006 14:43:09

Après quelques test il s'avère que j'ai quelque problème

Lorsque je lance le programme et que je clique sur le bouton quitter celui ci marche

mais lorsque je lance une radio en cliquant sur un bouton la radio ce lance bien avec mplayer et marche bien mais le programme est bloquer je ne peux plus cliquer sur aucun bouton et de ce faite je ne peut pas quitter le programme ni meme changer de radio ...

voila le code de mon programme :

#!/usr/bin/python
import os
from Tkinter import *
root=Tk()


#definition fonctions
def cheriefonction():
os.system("mplayer mms://vip1.yacast.fr/encodercheriefm")

def funfonction():
os.system("mplayer mms://vip2.yacast.fr/encoderfun")

def nrjfonction():
os.system("mplayer mms://vip1.yacast.fr/encodernrj")

def nostalgiefonction():
os.system("mplayer mms://vip1.yacast.fr/encodernostalgie")

def lemouvfonction():
os.system("mplayer mms://viptvr.yacast.fr/encoderlemouv")

def altafonction():
os.system("mplayer http://alta-frequenza.streamfr.com:8061/listen.pls")

def rcvfonction():
os.system("mplayer rtsp://a1251.l252147863.c2521.e.lr.akamaistream.net/live/D/1251/2521/666/reflector:47863?site")

def rcfmfonction():
os.system("mplayer mms://wm02.tv-radio.com/fbfrequenzamora-16k?site")

def fgfonction():
os.system("mplayer http://87.98.197.99:8000")

def fgufonction():
os.system("mplayer http://ufg.impek.tv")

def difonction():
os.system("mplayer http://www.di.fm/mp3/house.pls")

#representation graphique
texte=Label(root, text="Radio National",fg="red")
texte.pack(side=TOP)

bouton=Button(root,text=' Cherie FM ', command=cheriefonction)
bouton.pack(side=TOP)


bouton2=Button(root,text=' Fun-Radio ', command=funfonction)
bouton2.pack(side=TOP)

bouton3=Button(root,text=' NrJ ', command=nrjfonction)
bouton3.pack(side=TOP)

bouton4=Button(root,text=' Nostalgie ', command=nostalgiefonction)
bouton4.pack(side=TOP)

bouton5=Button(root,text=' Le Mouv ', command=lemouvfonction)
bouton5.pack(side=TOP)

texte=Label(root, text="Radio Corse",fg="red")
texte.pack(side=TOP)

bouton6=Button(root,text=' Alta Frequenza ', command=altafonction)
bouton6.pack(side=TOP)

bouton7=Button(root,text='Radio Corti Vivu', command=rcvfonction)
bouton7.pack(side=TOP)

bouton8=Button(root,text='RCFM', command=rcfmfonction)
bouton8.pack(side=TOP)

texte=Label(root, text="Radio House-Music",fg="red")
texte.pack(side=TOP)

bouton9=Button(root,text='Radio FG', command=fgfonction)
bouton9.pack(side=TOP)

bouton10=Button(root,text='Radio FG Underground', command=fgufonction)
bouton10.pack(side=TOP)

bouton11=Button(root,text='WwW.di.fm : House', command=difonction)
bouton11.pack(side=TOP)

bouton12=Button(root,text='Quitter', command=root.quit)
bouton12.pack(side=TOP)

root.mainloop()
7 Mai 2006 01:09:40

up ...

Plus personne pour m'aider ????
a b L Programmation
8 Mai 2006 20:11:53

L'indentation, c'est l'espace en début de ligne.
Pour indiquer qu'un code appartient à une fonction, on met des espaces avant la première ligne pour indiquer dans quel bloc elle se situe. Exemple:
  1. def ma fonction():
  2.  
  3. # une ligne appartenant à la fonction
  4.  
  5. # une ligne appartenant à la fonction
  6.  
  7.  
  8.  
  9. # une ligne appartenant à la fonction
  10.  
  11. if 1 == 1:
  12. # une ligne appartenant au if
  13. # une ligne appartenant au if
  14. # une ligne appartenant au if
  15.  
  16. # une ligne appartenant à la fonction
  17. # une ligne appartenant à la fonction
  18.  
  19. # une ligne en dehors de tout (global)

L'indentation (espaces en débuts de lignes) sont donc très importants. Enfin, ce sont surtout les alignements en colonnes qui importent.

Bref si tu mets les indentations dans ton code:
  1. import os
  2. from Tkinter import *
  3. root=Tk()
  4.  
  5.  
  6. #definition fonctions
  7. def cheriefonction():
  8. os.system("mplayer mms://vip1.yacast.fr/encodercheriefm")
  9.  
  10. def funfonction():
  11. os.system("mplayer mms://vip2.yacast.fr/encoderfun")
  12.  
  13. def nrjfonction():
  14. os.system("mplayer mms://vip1.yacast.fr/encodernrj")
  15.  
  16. def nostalgiefonction():
  17. os.system("mplayer mms://vip1.yacast.fr/encodernostalgie")
  18.  
  19. def lemouvfonction():
  20. os.system("mplayer mms://viptvr.yacast.fr/encoderlemouv")
  21.  
  22. def altafonction():
  23. os.system("mplayer http://alta-frequenza.streamfr.com:8061/listen.pls")
  24.  
  25. def rcvfonction():
  26. os.system("mplayer rtsp://a1251.l252147863.c2521.e.lr.akamaistream.net/live/D/1251/2521/666/reflector:47863?site")
  27.  
  28. def rcfmfonction():
  29. os.system("mplayer mms://wm02.tv-radio.com/fbfrequenzamora-16k?site")
  30.  
  31. def fgfonction():
  32. os.system("mplayer http://87.98.197.99:8000")
  33.  
  34. def fgufonction():
  35. os.system("mplayer http://ufg.impek.tv")
  36.  
  37. def difonction():
  38. os.system("mplayer http://www.di.fm/mp3/house.pls")
  39.  
  40. #representation graphique
  41. texte=Label(root, text="Radio National",fg="red")
  42. texte.pack(side=TOP)
  43.  
  44. bouton=Button(root,text=' Cherie FM ', command=cheriefonction)
  45. bouton.pack(side=TOP)
  46.  
  47.  
  48. bouton2=Button(root,text=' Fun-Radio ', command=funfonction)
  49. bouton2.pack(side=TOP)
  50.  
  51. bouton3=Button(root,text=' NrJ ', command=nrjfonction)
  52. bouton3.pack(side=TOP)
  53.  
  54. bouton4=Button(root,text=' Nostalgie ', command=nostalgiefonction)
  55. bouton4.pack(side=TOP)
  56.  
  57. bouton5=Button(root,text=' Le Mouv ', command=lemouvfonction)
  58. bouton5.pack(side=TOP)
  59.  
  60. texte=Label(root, text="Radio Corse",fg="red")
  61. texte.pack(side=TOP)
  62.  
  63. bouton6=Button(root,text=' Alta Frequenza ', command=altafonction)
  64. bouton6.pack(side=TOP)
  65.  
  66. bouton7=Button(root,text='Radio Corti Vivu', command=rcvfonction)
  67. bouton7.pack(side=TOP)
  68.  
  69. bouton8=Button(root,text='RCFM', command=rcfmfonction)
  70. bouton8.pack(side=TOP)
  71.  
  72. texte=Label(root, text="Radio House-Music",fg="red")
  73. texte.pack(side=TOP)
  74.  
  75. bouton9=Button(root,text='Radio FG', command=fgfonction)
  76. bouton9.pack(side=TOP)
  77.  
  78. bouton10=Button(root,text='Radio FG Underground', command=fgufonction)
  79. bouton10.pack(side=TOP)
  80.  
  81. bouton11=Button(root,text='WwW.di.fm : House', command=difonction)
  82. bouton11.pack(side=TOP)
  83.  
  84. bouton12=Button(root,text='Quitter', command=root.quit)
  85. bouton12.pack(side=TOP)
  86.  
  87. root.mainloop()
10 Mai 2006 20:04:54

ha ok merci de cette précision dsl mais je débute comme ta pu t'en douter

J'ai un petit problème le programme marche mais quand je lance une radio celui ci bug en bref je peut plus cliquer sur le programme ni pour changer de radio ni pour quitter.
Il me lance mplayer en console qui li bien la radio demander puis il sarete plus et je peut pas l'areter avec mon programme puisque je peut plus rien faire dessus tous est bloquer
a b L Programmation
10 Mai 2006 20:24:24

le problème est que os.system() attend la fin de la commande pour continuer: il attend que tu fermes mplayer.

EDIT:
Pour lancer carrément un process séparé, tu peux utiliser spawnl()

Ou utiliser un Thread. Un thread est une tâche qui est exécuté en parallèle. Bref, faire du multi-tâches dans ton programme.
En python, c'est très simple à utiliser. Il faut d'abord importer la lib thread:
  1. import thread

Ensuite créer ta fonction qui sera exécuté en parallème au programme principal et en parallèle avec toutes les autres taches:
  1. def toto():
  2. for i in range (1,10000):
  3. print i


Enfin, tu lances le thread en donnant la fonction à lancer et sa liste de paramètres entre parenthèses (ici c'est vide, car la fonction n'a pas de paramètre:
  1. thread.start_new_thread(toto, ())

a b L Programmation
10 Mai 2006 20:40:01

Dans ton cas, je te suggère de faire une fonction qui lance le mplayer avec une radio passée en paramètre:
  1. def lancerMPlayer(siteRadio):
  2. os.system("mplayer " + siteRadio)


Et à chaque appel de bouton, faire un thread qui lance le mplayer en parallèle:

  1. def cheriefonction():
  2. thread.start_new_thread(lancerMPlayer, ("mms://vip1.yacast.fr/encodercheriefm"))



EDIT: l'inconvénient est qu'il va te lancer un MPlayer par clic de bouton, mais je ne vois pas trop comment faire autrement.
a b L Programmation
10 Mai 2006 20:58:27

J'ai pensé à un autre truc: ne pas résoudre le problème en python mais en commande DOS.
C'est-à-dire qu'au lieu de lancer la commande:

  1. os.system("mplayer mms://vip1.yacast.fr/encodercheriefm")


Lancer avec la commande start qui ouvre avec ce qu'il faut directement (ça marche avec tous les types de fichier reconnus):
  1. os.system("start mms://vip1.yacast.fr/encodercheriefm")

En plus, il me semble que:
- ça retourne desuite, ça n'attend pas que l'on ferme le programme
- ça ne devrait pas lancer plusieurs programmes si windows est bien fait

Bref, tu peux oublier les thread si ceci marche ;-)
10 Mai 2006 22:19:01

ouè mais je suis sous linux alors DOS ....
a b L Programmation
11 Mai 2006 13:01:44

alors tu peux lancer le mplayer en tâche de fond avec un '&' à la fin de la commande.
Après faudrait récupérer son PID pour faire un kill dessus avant d'en lancer un nouveau.
11 Mai 2006 19:39:32

J'ai une petite amélioration j'arrive enfin a lancer lancer plusieur radio, je peut cliquer sur une radio et après cliquer sur une autre.

Mais le problème est que j'ai les deux radios en lecture il faudrai que j'arrive a trouver un moyen de dire au programme si ya une lecture en cour de mplayer de la killer et de lancer après la commande demander ou sinon de lancer dessuite la commande demander

sa passerai pas par une commande if non ?

11 Mai 2006 19:41:15

J'ai une petite amélioration j'arrive enfin a lancer lancer plusieur radio, je peut cliquer sur une radio et après cliquer sur une autre.

Mais le problème est que j'ai les deux radios en lecture il faudrai que j'arrive a trouver un moyen de dire au programme si ya une lecture en cour de mplayer de la killer et de lancer après la commande demander ou sinon de lancer dessuite la commande demander

sa passerai pas par une commande if non ?

11 Mai 2006 19:56:52

Sinon, tu peux récupérer le PID de ton mplayer avec un "ps | grep mplayer" et tu kill ce process (donc à faire à chaque fois que tu clique sur une nouvelle radio)
11 Mai 2006 20:13:49

oui mais si je doit faire sa manuellement a chaque fois ....
a b L Programmation
11 Mai 2006 21:12:22

En shell, tu peux faire un ps, grep puis cut, rediriger le tout dans un fichier, que tu lis en python pour envoyer la commande kill qu'il faut.

Sinon, tu peux utiliser la fonction python spawnl() qui retourne le PID. Tu peux alors appeler la fonction python kill en donnant le PID.
Un truc du genre:
- tu déclares une variable globale avant tout le reste:
  1. pidActuel = 0

- A chaque clic sur bouton tu fais un truc du genre:
  1. if pidActuel != 0:
  2. os.kill(pidActuel, signal.SIGTERM)
  3.  
  4. pidActuel = os.spawnl("mplayer machin")

11 Mai 2006 21:57:58

#!/usr/bin/python
import os
import thread
from Tkinter import *
root=Tk()
pidActuel = 0

#definition fonctions
def cheriefonction():
if pidActuel = 0: os.kill(pidActuel, signal.SIGTERM)

pidActuel = os.spawnl("mplayer machin")
os.system("mplayer mms://vip1.yacast.fr/encodercheriefm&")

pour le premier bouton sa serait comme sa ???
a b L Programmation
11 Mai 2006 22:21:23

dans le spawnl, tu mets ce qu'il y a dans os.system (et tu l'enlève, puisque c'est le spawnl() qui fait faire le boulot de system).
Pense aux espaces et aux imports (import signal)
11 Mai 2006 22:27:33

#!/usr/bin/python
import os
from Tkinter import *
root=Tk()
pidActuel = 0


#definition fonctions
def cheriefonction():
if pidActuel = 0:
os.kill(pidActuel, signal.SIGTERM)
pidActuel = os.spawnl("mplayer mms://vip1.yacast.fr/encodercheriefm&")

def funfonction():
if pidActuel = 0:
os.kill(pidActuel, signal.SIGTERM)
pidActuel = os.spawnl("mplayer mms://vip2.yacast.fr/encoderfun&")

j'ai fait comme ca

mais sa m'envoie ce message d'erreur :

File "RadioV2.py", line 10
if pidActuel = 0:
^
IndentationError: expected an indented block

a b L Programmation
12 Mai 2006 00:16:31

t'as pas mis les espaces : ton if appartient à la fonction.
le kill appartient au if
le spawn n'appartient qu'à la fonction:

ps: poste tes code avec le bouton [ code ] pour voir l'indentation.
12 Mai 2006 16:30:12

j'ai pas bien comprit ce que tu m'a expliquer la ....

je c pas ou introduire le if par rapport a la fonction que j'ai de base dans mon programme ...
a b L Programmation
12 Mai 2006 18:55:18

Le if est dans ta fonction:

  1. def cheriefonction():
  2. if pidActuel != 0:
  3. os.kill(pidActuel, signal.SIGTERM)
  4.  
  5. pidActuel = os.spawnl("mplayer mms://vip1.yacast.fr/encodercheriefm&")


si pidActuel est différent de 0, c'est qu'on a déjà utilisé un mplayer, donc on le supprime avec os.kill.
ensuite dans tous les cas (que ce soit le premier lancement ou un lancement suivant) on lance le mplayer en récupérant le pid pour le supprimer au prochain appui de bouton.
12 Mai 2006 20:14:41

j'ai créer toute les fonctions comme tu ma dit mais maintenant le programme m'envoie ce message d'erreur quand je clique sur un bouton :

Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.4/lib-tk/Tkinter.py", line 1345, in __call__
return self.func(*args)
File "RadioV2.py", line 10, in cheriefonction
if pidActuel != 0:
UnboundLocalError: local variable 'pidActuel' referenced before assignment


a b L Programmation
12 Mai 2006 21:08:11

ah oui effectivement. Quand tu utilise une variable dans une fonction, elle n'est définie que pour la fonction. Ici, tu utilises une variable globale à tout le programme, il faut donc indiquer que ta variable est globale et pas locale à la fonction. Pour cela, ajoutes un "global tavariable" en début de fonction:

  1. def cheriefonction():
  2.  
  3. global pidActuel
  4.  
  5. if pidActuel != 0:
  6. os.kill(pidActuel, signal.SIGTERM)
  7.  
  8. pidActuel = os.spawnl("mplayer mms://vip1.yacast.fr/encodercheriefm&")
12 Mai 2006 21:43:06

quand on règle un problème un autre apparai c phénoménal
maintenant j'ai ce message qui apparai :

Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.4/lib-tk/Tkinter.py", line 1345, in __call__
return self.func(*args)
File "RadioV2.py", line 13, in cheriefonction
pidActuel = os.spawnl("mplayer mms://vip1.yacast.fr/encodercheriefm&")
TypeError: spawnl() takes at least 2 arguments (1 given)
a b L Programmation
13 Mai 2006 11:14:51

oui, j'ai oublié, il y a 2 arguments: le premier permet d'indiquer si on veut attendre la fin (comme avec os.system()) en mettant os.P_WAIT, ou bien ne pas attendre la fin avec os.P_NOWAIT.
Autre chose, il faut séparer les paramètres (et enlever le & qui ne sert plus si on utilise P_NOWAIT):

  1. pidActuel = os.spawnl(os.P_NOWAIT, "mplayer", "mms://vip1.yacast.fr/encodercheriefm")


Bon, il y a peut-être un autre problème, car il faut peut-être donner le chemin complet du programme. C'est-à-dire que si mplayer se trouve dans /usr/local/bin, il faudra mettre:
  1. pidActuel = os.spawnl(os.P_NOWAIT, "/usr/local/bin/mplayer", "mms://vip1.yacast.fr/encodercheriefm")

Mais essaie sans, si ça ne marche pas, met le chemin complet (en vérifiant que c'est le bon chemin).
13 Mai 2006 12:34:22

bon j'ai été obligé de mettre le chemin complet comme tu me l'avait dit donc je me retrouve avec un code comme ceci:

def cheriefonction():
global pidActuel
if pidActuel != 0:
os.kill(pidActuel, signal.SIGTERM)
pidActuel = os.spawnl(os.P_NOWAIT, "/usr/bin/mplayer", "mms://vip1.yacast.fr/encodercheriefm")

Mais dans ce cas la le mplayer ce lance corectement apparement, mais il ne me li pas l'adresse de la radio ...

voila ce ke me dit la console quand je lance le programme :
MPlayer 2:0.99+1.0pre7try2+cvs20060117-0ubuntu7 (C) 2000-2006 MPlayer Team
CPU: Advanced Micro Devices Sempron/Athlon MP/XP/XP-M Barton,Thorton (Family: 6, Stepping: 0)
CPUflags: MMX: 1 MMX2: 1 3DNow: 1 3DNow2: 1 SSE: 1 SSE2: 0
Compiled with runtime CPU detection.


91 audio & 204 video codecs
Usage: mplayer [options] [url|path/]filename

Basic options: (complete list in the man page)
-vo <drv[:dev]> select video output driver & device ('-vo help' for a list)
-ao <drv[:dev]> select audio output driver & device ('-ao help' for a list)
vcd://<trackno> play (S)VCD (Super Video CD) track (raw device, no mount)
dvd://<titleno> play DVD title from device instead of plain file
-alang/-slang select DVD audio/subtitle language (by 2-char country code)
-ss <timepos> seek to given (seconds or hh:mm:ss) position
-nosound do not play sound
-fs fullscreen playback (or -vm, -zoom, details in the man page)
-x <x> -y <y> set display resolution (for use with -vm or -zoom)
-sub <file> specify subtitle file to use (also see -subfps, -subdelay)
-playlist <file> specify playlist file
-vid x -aid y select video (x) and audio (y) stream to play
-fps x -srate y change video (x fps) and audio (y Hz) rate
-pp <quality> enable postprocessing filter (details in the man page)
-framedrop enable frame dropping (for slow machines)

Basic keys: (complete list in the man page, also check input.conf)
<- or -> seek backward/forward 10 seconds
down or up seek backward/forward 1 minute
pgdown or pgup seek backward/forward 10 minutes
< or > step backward/forward in playlist
p or SPACE pause movie (press any key to continue)
q or ESC stop playing and quit program
+ or - adjust audio delay by +/- 0.1 second
o cycle OSD mode: none / seekbar / seekbar + timer
* or / increase or decrease PCM volume
x or z adjust subtitle delay by +/- 0.1 second
r or t adjust subtitle position up/down, also see -vf expand

* * * SEE THE MAN PAGE FOR DETAILS, FURTHER (ADVANCED) OPTIONS AND KEYS * * *
a b L Programmation
13 Mai 2006 14:20:36

J'ai fait un test rapide en lançant autre chose, et effectivement, je me suis encore trompé :-)
Dans la liste des paramètres, le premier paramètre doit être le nom du programme.
C'est pour ça que le site n'était pas envoyé en paramètre.
Donc voici la commande correcte:
  1. pidActuel = os.spawnl(os.P_NOWAIT, "/usr/bin/mplayer", "mplayer", "mms://vip1.yacast.fr/encodercheriefm")

13 Mai 2006 18:29:56

sa marche tjrs pas ken je clique la première foi la radio se lance normalement mais elle s'arete plus et quand je clique sur un autre bouton la console m'affiche:

Traceback (most recent call last):
File "/usr/lib/python2.4/lib-tk/Tkinter.py", line 1345, in __call__
return self.func(*args)
File "RadioV2.py", line 18, in funfonction
os.kill(pidActuel, signal.SIGTERM)
NameError: global name 'signal' is not defined
a b L Programmation
13 Mai 2006 19:45:12

Citation :

CRicky a écrit :
dans le spawnl, tu mets ce qu'il y a dans os.system (et tu l'enlève, puisque c'est le spawnl() qui fait faire le boulot de system).
Pense aux espaces et aux imports (import signal)

;-)

ça plantera plus au moment où tu voudra arrêter le mplayer précédent, et donc ça devrait l'arrêter.

ps: Tu pourrais même ajouter un bouton "stop" qui ne fait que kill du mplayer.
13 Mai 2006 20:19:30

J'ai pas comprit le truc des import signal faut que je face quoi ?
a b L Programmation
13 Mai 2006 21:41:20

Ton erreur est:
  1. os.kill(pidActuel, signal.SIGTERM)
  2. NameError: global name 'signal' is not defined

("signal" n'est pas défini)

SIGTERM est défini dans la librairie "signal", c'est pour ça qu'il est utilisé avec "signal." devant.
Et pour que python comprenne, il faut aussi lui indiquer d'importer cette librairie au début.
Donc, en dessous de ton import os, ajoute:
  1. import signal

13 Mai 2006 22:41:08

ha sa marche niquel merci beaucoup de ton aide parcontre un dernier truc pour mon bouton "quitter" pour quitter le programme

j'avai un bouton avec une commande root.quit

mais sa me faisai quitter le programme s'en areter mplayer

j'ai donc modifier ce bouton et j'ai mis exit a la place de la lecture d'une adresse pour mplayer sa me coupe bien mplayer mais le bouton marche plus pour quitter le programme

il fodrai donc que j'associe les deux fonction au meme bouton

comment je pourrai faire sa ???
a b L Programmation
14 Mai 2006 13:24:30

Tu peux appeler une fonction dans une autre fonction.

D'ailleurs, je te suggère de faire une fonction qui ne fait que fermer le mplayer s'il existe:
  1. def fermerMPlayer():
  2.  
  3. global pidActuel
  4.  
  5. if pidActuel != 0:
  6. os.kill(pidActuel, signal.SIGTERM)
  7. pidActuel = 0


Ensuite dans chacune des fonctions des boutons, tu appelle cette fonction en début. exemple:

  1. def cherieFonction():
  2.  
  3. global pidActuel
  4.  
  5. fermerMPlayer()
  6.  
  7. pidActuel = os.spawnl(os.P_NOWAIT, "/usr/bin/mplayer", "mplayer", "mms://vip1.yacast.fr/encodercheriefm")


donc pour ton bouton fermer, il te suffit de fermer mplayer, puis de fermer ton programme:
  1. def quitter():
  2.  
  3. fermerMPlayer()
  4.  
  5. root.quit()

Donc voilà, ça fait une fonction qui en appelle 2 autres.
Si tu ne veux pas faire la fonction fermerMPlayer(), tu peux y mettre directement le kill().
14 Mai 2006 15:08:34

j'ai créer la fonction comme tu m'a dit mais sa marche pas la console me renvoie :

File "RadioV2.py", line 31, in funfonction
fermerMplayer()
NameError: global name 'fermerMplayer' is not defined

sa me lance la première radio quand je clique la première fois sur un bouton ensuite quand je clique sur un autre bouton pour changer de radio la console me renvoie ce message
a b L Programmation
14 Mai 2006 18:01:32

N'aurais-tu pas oublié le "def" avant et le ":" après. Ceci est obligatoire pour définir une fonction.
Ou bien ne te serais-tu pas trompé dans les majuscules ? (j'avais mis un P majuscule fermerMPlayer au lieu de fermerMplayer)
      • 1 / 2
      • 2
      • Dernier
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS