Tom's Guide > Forum > Programmation > programmation graphique linux

programmation graphique linux

Forum Programmation : programmation graphique linux

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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



Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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.

Répondre à CRicky

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

Répondre à Francescu

Tu peux le faire en python avec tkinter.

Répondre à CRicky

tu orai pas un tuto ki explike comment je pe faire

Répondre à Francescu

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

Répondre à Francescu

en python ?

Code :
  1. import os
  2. os.system(mplayer mms://vip1.yacast.fr/encodercheriefm)



Pour l'interface graphique, il y a:
http://www.pythonware.com/library/an-introduction-to-tkinter.htm
Mais je pense qu'il y a mieux ailleurs

Répondre à CRicky

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 ...

Répondre à Francescu

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

Répondre à Francescu

D'abord tu définis une fonction qui sera l'action du bouton:

Code :
  1. def maFonction():
  2.     print "hello"



Ensuite, tu associes la fonction au bouton quand tu le crée. Par exemple:

Code :
  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

Répondre à CRicky

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

Répondre à Francescu

ben au lieu de faire un print, tu fais un os.system()

Répondre à CRicky

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

Répondre à Francescu

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

Répondre à Francescu

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:

Code :
  1. import os


Répondre à CRicky

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 ;)

Répondre à Francescu

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 [...] .pls&#034; )

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()

Répondre à Francescu

up ...

Plus personne pour m'aider ????

Répondre à Francescu

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:

Code :
  1. def ma fonction():
  2.  
  3.   # une ligne appartenant à la fonction
  4.   # une ligne appartenant à la fonction
  5.   # une ligne appartenant à la fonction
  6.   if 1 == 1:
  7.       # une ligne appartenant au if
  8.       # une ligne appartenant au if
  9.       # une ligne appartenant au if
  10.   # une ligne appartenant à la fonction
  11.   # une ligne appartenant à la fonction
  12. # 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:

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

Répondre à CRicky

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

Répondre à Francescu

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:

Code :
  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:

Code :
  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:

Code :
  1. thread.start_new_thread(toto, ())


Répondre à CRicky

Dans ton cas, je te suggère de faire une fonction qui lance le mplayer avec une radio passée en paramètre:

Code :
  1. def lancerMPlayer(siteRadio):
  2.   os.system("mplayer " + siteRadio)



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

Code :
  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.

Répondre à CRicky

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:

Code :
  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):

Code :
  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 ;-)

Répondre à CRicky

ouè mais je suis sous linux alors DOS ....

Répondre à Francescu

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.

Répondre à CRicky

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 ?

Répondre à Francescu

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 ?

Répondre à Francescu

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)

Répondre à vutom

oui mais si je doit faire sa manuellement a chaque fois ....

Répondre à Francescu

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:

Code :
  1. pidActuel = 0


- A chaque clic sur bouton tu fais un truc du genre:

Code :
  1. if pidActuel != 0:
  2.   os.kill(pidActuel, signal.SIGTERM)
  3. pidActuel = os.spawnl("mplayer machin" )


Répondre à CRicky

#!/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 ???

Répondre à Francescu

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)

Répondre à CRicky

#!/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

Répondre à Francescu

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.

Répondre à CRicky

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 ...

Répondre à Francescu

Le if est dans ta fonction:

Code :
  1. def cheriefonction():
  2.   if pidActuel != 0:
  3.       os.kill(pidActuel, signal.SIGTERM)
  4.   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.

Répondre à CRicky

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


Répondre à Francescu

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:

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

Répondre à CRicky

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)

Répondre à Francescu

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):

Code :
  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:

Code :
  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).

Répondre à CRicky

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 * * *

Répondre à Francescu

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:

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


Répondre à CRicky

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

Répondre à Francescu

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.

Répondre à CRicky

J'ai pas comprit le truc des import signal faut que je face quoi ?

Répondre à Francescu

Ton erreur est:

Code :
  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:

Code :
  1. import signal


Répondre à CRicky

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 ???

Répondre à Francescu

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:

Code :
  1. def fermerMPlayer():
  2.  
  3.   global pidActuel
  4.   if pidActuel != 0:
  5.       os.kill(pidActuel, signal.SIGTERM)
  6.       pidActuel = 0



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

Code :
  1. def cherieFonction():
  2.   global pidActuel
  3.   fermerMPlayer()
  4.   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:

Code :
  1. def quitter():
  2.   fermerMPlayer()
  3.   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().

Répondre à CRicky

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

Répondre à Francescu

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)

Répondre à CRicky
Page Précédente
1 2
Tom's Guide > Forum > Programmation > programmation graphique linux
Aller à :

Il y a 437 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens