Un Script De Météo Francaise


Messages recommandés

Dsl pour le screeenshot, j'ai remis le bon.

Merci pour ces informations, elles vont mettre surment précieuse, je vais m'y remettre bientot ;)

Lien vers message
Partager sur d'autres sites
  • Réponses 115
  • Created
  • Dernière réponse

Top Posters In This Topic

Lu all,

Bon j'ai pas eut le temps de m'en occuper hier, je mis suis remis ce matin mais j'ai une (derniere ?) question, comment on fait pour voir si une variable existe, par exmeple en fesant comme ca :

if reg=='maregion':

des = 'leiendemaregion'

else:

des = 'lelienpardefault'

ca ne marche pas, en rajoutant par exmeple reg = 'maregion' devant ca marche, il faut donc vérifier si la variable existe mais je ne sais pas comment faire, j'ai beau chercher sur le net je ne trouve pas ma réponse donc si quelqu'un pouvait m'aider ca m'arrangerais bien ^^, normalement aprés le script multi région sera fonctionnel.

Merci d'avance.

Lien vers message
Partager sur d'autres sites

Lu all,

Bon j'ai pas eut le temps de m'en occuper hier, je mis suis remis ce matin mais j'ai une (derniere ?) question, comment on fait pour voir si une variable existe, par exmeple en fesant comme ca :

if reg=='maregion':

des = 'leiendemaregion'

else:

des = 'lelienpardefault'

ca ne marche pas, en rajoutant par exmeple reg = 'maregion' devant ca marche, il faut donc vérifier si la variable existe mais je ne sais pas comment faire, j'ai beau chercher sur le net je ne trouve pas ma réponse donc si quelqu'un pouvait m'aider ca m'arrangerais bien ^^, normalement aprés le script multi région sera fonctionnel.

Merci d'avance.

Pour le screenshot, tu avais juste modifier le lien visible mais pas le lien effectif... c corrigé.

Pour ton soucis, je ne comprend pas trop...

Cela dit, tu peux déclarer ta variable au préalable... Si tu ne sais pas si ta variable est globale ou pas, tu peux contourner le problème en disant à python :

<<essaye defaire ca : ... et si ca marche pas, fait ceci : ....>>

Concrètement ca s'écrit comme ca (tu vas voir c'est super compliqué -surtout si tu as des bases en anglais- ;) )

try:	if reg=='maregion':		des = 'leiendemaregion'	else:		des = 'lelienpardefault'except:	des = 'lelienpardefaut'

Bien entendu le code que je met n'est pas super logique car ce que tu sembles vouloir toi, c'est détecter si la variable reg a été déclarée avant ou pas, et si elle n'a pas été déclarée, alors tu lui déclares une valeur par défaut...

En tous cas, si c'est pas ce que tu voulais, alors voici une présentation du 'try: except : ' si pratique en python !!!

Lien vers message
Partager sur d'autres sites

Ouai je connais ce code mais j'aime pas pensé a l'utiliser, faut que je teste mais ca reviens a peu prés au meme que ce que je fesais.

En fait je vais t'espliquer comment je veux faire :

Mon but :

A partir d'un bouton, afficher un liste qui permet de choisir sa région, une fois fait, quand on utilise les boutons matin, aprem, etc ... charger la carte de la région voulut.

Pour faire simple, on veux qu'une seul carte s'affiche avec un seul bouton.

Le lien de base est mis sous la variable :

WEB_IMAGE1 = "http://meteo.france2.fr/img/f2-france-512x384-j0am.jpg"

moi je coupe en 3 cette variable :

des = 'france'

WEB_IMAGE1A = "http://meteo.france2.fr/img/f2-"

WEB_IMAGE1B = "-512x384-j0am.jpg"

que je recolle :

WEB_IMAGE1 = WEB_IMAGE1A + des + WEB_IMAGE1B

comme ca, quand je choisis ma région, je cré une variable

item = self.list.getSelectedItem()

reg = item.getLabel()

je définis le control du bouton comme suit :

if control == self.button:		 if reg==item.getLabel():					self.downloadURL(WEB_IMAGE1A + reg + WEB_IMAGE1B,LOC_IMAGE1A + reg + LOC_IMAGE1B)					self.removeControl(self.icn)					self.icn = xbmcgui.ControlImage(PosImg[0],PosImg[1],PosImg[2],PosImg[3],LOC_IMAGE1A + reg + LOC_IMAGE1B)					self.addControl(self.icn)					self.setFocus(self.button2)		 else:			self.downloadURL(WEB_IMAGE1,LOC_IMAGE1)			self.removeControl(self.icn)			self.icn = xbmcgui.ControlImage(PosImg[0],PosImg[1],PosImg[2],PosImg[3],LOC_IMAGE1)			self.addControl(self.icn)			self.setFocus(self.button2)

et c'est la dedans que je bloque, car vu que la variable reg n'est pas définit au départ ca bug (enfin je crois que c'est a cause de ca, car si je lui attribu une valeur de départ (que je ne peut pas changer ?) ca marche).

En espérant mettre fais comprendre ;)

EDIT : le code try/except est surment la solution, sauf qu'il faut que je l'utilise directement dans le controle des boutons, ex :

		elif control == self.button3:	 			try:				self.downloadURL(WEB_IMAGE3A + reg + WEBIMAGE3B,LOC_IMAGE3A + reg + LOC_IMAGE3B)				self.removeControl(self.icn)				self.icn = xbmcgui.ControlImage(PosImg[0],PosImg[1],PosImg[2],PosImg[3],LOC_IMAGE3A + reg + LOC_IMAGE3B)				self.addControl(self.icn)				self.setFocus(self.button3)			except:				self.downloadURL(WEB_IMAGE3,LOC_IMAGE3)				self.removeControl(self.icn)				self.icn = xbmcgui.ControlImage(PosImg[0],PosImg[1],PosImg[2],PosImg[3],LOC_IMAGE3)				self.addControl(self.icn)				self.setFocus(self.button3)

si reg n'est pas définis ca ne pourra pas dl la carte, ca prendra donc le except, si il est définit ca la dl, ca prendra donc le try, j'ai donc essayer mais maintenant plus moyen d'ouvrir la fenetre pour choisir la région, ca se fou de ma ******* :D

Modifié par Xas
Lien vers message
Partager sur d'autres sites

envoi ton fichier plutot, car là je vois pas trop ce que tu fais.. enfin je crois voir mais alors c'est pas le plus simple !

Comme je te disais, tu devrais créé une liste de toutes les valeurs de la variable 'des'

des_list= ['france' , 'region1' , 'region2' , ...]

Ensuite au début du script tu ecrits :

@global desdes = des_list[0] #l'élément 0 de la liste : 'france'

maintenant la variable 'des' sera connu en lecture depuis n'importe ou dans ton script. Lorsque tu choisis une nouvelle région dans la liste, il faut changer cette vrariable 'des' par la nouvelle région. Donc si le controlList renvoi : 1 (item N°2 sélectionné) alors tu pointe l'item 2 dans la liste des_list que tu attibues à 'des'

bon.. c pas clair ...

Mais sache donc que tu vas actualiser ton lien pour les images dès que l'utilisateur aura choisi sa ragion... le reste du script se comportant normalement...

Dans chaque fonction où tu voudras écrire la variable 'des', il faudra au préalable dire que 'des' que tu vas écrire est la variable globale:

global desdes = des_list[list.selecteditem] #aproximativement

C'est pas clair comme ca... hein ?

lol

Envoi ton code, qu'on parle de la même chose !

a+

Lien vers message
Partager sur d'autres sites

Bon j'ai définis au début du script ca :

des_list= ['france' , 'alsace' , 'lorraine']

des = des_list[0]

le bouton qui commande le choix de la région s'appelle button10 :

elif control == self.button10:

self.panel = xbmcgui.ControlImage(226,120,464,390,panel2)

self.addControl(self.panel)

self.strAction20 = xbmcgui.ControlLabel(383,169,464,20, 'Choisissez votre région:', 'special12', '0xFFFFFFFF')

self.addControl(self.strAction20)

self.list = xbmcgui.ControlList(246,200,369,255)

self.addControl(self.list)

self.list.addItem('france')

self.list.addItem('alsace')

self.list.addItem('lorraine')

self.setFocus(self.list)

Mais si on définit la variable au début, qu'est-ce qu'on marque dans self.list, je n'ai pas compris ce qu'il faut faire a cette étape :S

Lien vers message
Partager sur d'autres sites

Bon j'ai définis au début du script ca :

des_list= ['france' , 'alsace' , 'lorraine']

des = des_list[0]

le bouton qui commande le choix de la région s'appelle button10 :

elif control == self.button10:

self.panel = xbmcgui.ControlImage(226,120,464,390,panel2)

self.addControl(self.panel)

self.strAction20 = xbmcgui.ControlLabel(383,169,464,20, 'Choisissez votre région:', 'special12', '0xFFFFFFFF')

self.addControl(self.strAction20)

self.list = xbmcgui.ControlList(246,200,369,255)

self.addControl(self.list)

self.list.addItem('france')

self.list.addItem('alsace')

self.list.addItem('lorraine')

self.setFocus(self.list)

Mais si on définit la variable au début, qu'est-ce qu'on marque dans self.list, je n'ai pas compris ce qu'il faut faire a cette étape :S

Simple. Tu as déclaré une liste en dehors de la classe. Cette liste est par conséquent accessible en lecture à l'ensemble du script. Par conséquent on peut la parcourir pour afficher les régions dans la liste

elif control == self.button10:		self.panel = xbmcgui.ControlImage(226,120,464,390,panel2)		self.addControl(self.panel)		self.strAction20 = xbmcgui.ControlLabel(383,169,464,20, 'Choisissez votre région:', 'special12', '0xFFFFFFFF')		self.addControl(self.strAction20)		self.list = xbmcgui.ControlList(246,200,369,255)		self.addControl(self.list)		self.list.reset() #réinitialise le control list, ca sera certainement plus propre		for region in des_list: # "pour chaque region dans la liste, tu fais :"				self.list.addItem(region)		#self.list.addItem('france')		#self.list.addItem('alsace')		#self.list.addItem('lorraine')		self.setFocus(self.list)

ainsi ta liste sera 'formée' avec tous les éléments de la liste des_list...

Ensuite si l'item 'i' est sélectionné dans la liste, la région correspondante sera des_list (i est un entier int)

Lien vers message
Partager sur d'autres sites

Bon, en fait, c'est vraiment un truc basique (mais faut le savoir), et ca m'énerve de bloquer sur un truc comme ca, j'ai bien mis le code que tu ma donné, mais le script ne se lance plus, voici le log :

23-01-2006 18:12:01 INFO File "

23-01-2006 18:12:01 INFO Q:\scripts\MyMeteo\MyMeteo09.py

23-01-2006 18:12:01 INFO ", line

23-01-2006 18:12:01 INFO 304

23-01-2006 18:12:01 INFO

23-01-2006 18:12:01 INFO

23-01-2006 18:12:01 INFO for region in des_list:

23-01-2006 18:12:01 INFO

23-01-2006 18:12:01 INFO ^

23-01-2006 18:12:01 INFO SyntaxError

23-01-2006 18:12:01 INFO :

23-01-2006 18:12:01 INFO invalid syntax

Serait-ce le "region" a definir (il me semble que c'est ce que l'on fait la), bloquer sur un truc comme ca ca me tue :marteau:

Edit : Non, je comprends pas d'où ca vient, car ce n'est ni plus ni moins qu'une boucle, j'ai regarder dans un autre script c'est la bonne syntaxe sinon l'autre script ne marche pas non plus :huh:

Modifié par Xas
Lien vers message
Partager sur d'autres sites

J'ai retiré la ligne la :

	   	 	self.list.reset()

Maintenant voici le log :

23-01-2006 18:30:30 INFO File "

23-01-2006 18:30:30 INFO Q:\scripts\MyMeteo\MyMeteo09.py

23-01-2006 18:30:30 INFO ", line

23-01-2006 18:30:30 INFO 307

23-01-2006 18:30:30 INFO

23-01-2006 18:30:30 INFO

23-01-2006 18:30:30 INFO elif control == self.list:

23-01-2006 18:30:30 INFO

23-01-2006 18:30:30 INFO

23-01-2006 18:30:30 INFO

23-01-2006 18:30:30 INFO

23-01-2006 18:30:30 INFO ^

23-01-2006 18:30:30 INFO SyntaxError

23-01-2006 18:30:30 INFO :

23-01-2006 18:30:30 INFO invalid syntax

woot eek

Edit : J'ai remis la ligne de code, l'erreur est la meme que dans ce post (sauf le n° de ligne qui change), en enlevant tout le controle, l'erreur passe au controle suivant ! ;)

Modifié par Xas
Lien vers message
Partager sur d'autres sites

Le voila ;)

Lien vers message
Partager sur d'autres sites

C'est bon, je pense avoir trouvé...

De la ligne 296 à 306, vérifie l'indentation... l'indentation de la ligne 306 je crois était mauvaise :

		elif control == self.button10:			self.panel = xbmcgui.ControlImage(226,120,464,390,panel2)			self.addControl(self.panel)			self.strAction20 = xbmcgui.ControlLabel(383,169,464,20, 'Choisissez votre région:', 'special12', '0xFFFFFFFF')			self.addControl(self.strAction20)			self.list = xbmcgui.ControlList(246,200,369,255)			self.addControl(self.list)		   	self.list.reset()			for region in des_list:				self.list.addItem(region)			  self.setFocus(self.list)

(Fais attention, je ne sais pas quel éditeur tu utilises, mais des fois on ne voit pas trop la différence entre les tabulations et les espaces et ca peut foutre le boxon...)

EDIT: la preuve de mon explication sur l'indentation, le code que je viens de mettre aurait du être bon (dans mon éditeur) mais une fois validé, je me rend compte que ne n'est pas bon....

Modifié par alexsolex
Lien vers message
Partager sur d'autres sites

Bon le script se lance, c'était bien ca, bizare, j'utilise wordpad, on voit normalement bien la différence ...

Je disais donc, le script se lance, je vais sur le bouton pour changer de région, je clic sur une région, la liste de choix se ferme mais n'arrive pas a charger la nouvelle carte, je dois mal déclaré la nouvelle 'des'

		elif control == self.button10:	 			self.panel = xbmcgui.ControlImage(226,120,464,390,panel2)				self.addControl(self.panel)				self.strAction20 = xbmcgui.ControlLabel(383,169,464,20, 'Choisissez votre région:', 'special12', '0xFFFFFFFF')				self.addControl(self.strAction20)				self.list = xbmcgui.ControlList(246,200,369,255)				self.addControl(self.list)		   		self.list.reset()			for region in des_list:				self.list.addItem(region)			self.setFocus(self.list)		elif control == self.list:			item = self.list.getSelectedItem()			des = item.getLabel()			self.removeControl(self.list)  			self.removeControl(self.strAction20)			self.removeControl(self.panel)			self.downloadURL(WEB_IMAGE1,LOC_IMAGE1)			self.removeControl(self.icn)			self.icn = xbmcgui.ControlImage(PosImg[0],PosImg[1],PosImg[2],PosImg[3],LOC_IMAGE1)			self.addControl(self.icn)			self.setFocus(self.button1)

Une dernière petite aide et je te laisse tranquille ^^ (suis désolé)

Edit : A propos de ton edit, ca vient de me faire pareil, c'est un truc dont je me rapelerais, en plus ca avait déjà du me le faire.

Modifié par Xas
Lien vers message
Partager sur d'autres sites

Hé hé !

Tu avances !

Et effectivement tu as raison pour la variable 'des'...

Comme je t'ai expliqué une variable n'est 'disponible' que là où elle a été créée...

Donc quand tu écris

des = item.getLabel()

ca veut dire que dans la fonction, de la classe où est cette fonction, cette variable 'des' sera créée pour CETTE fonction et cette fonction uniquement...

Si tu veux que la variable 'des' soit reconnue depuis toute la classe, il faut que tu la nommes 'self.des'. En effet, self. va signifier que la variable 'des appartient à self c'est à dire à la classe (grosso-modo)

Une autre solution (et ca va être ton cas) c'est de définir la variable en dehors de toutes classes, elle sera ainsi disponible depuis tout ton script (quelque soit la classe et/ou la fonction). C'est en fait ce que tu as fait avec des_list et des au début de ton script. Elles sont globales à tout le script.

Si tu veux la lire depuis une fonction dans une classe , pas de problèmes :

print des

fonctionnera n'importe où dans le script

Par contre, si tu veux l'écrire il faudra dire dans ta classe ou dans ta fonction (là où tu veux l'écrire en fait) que la variable des est globale :

def mafonction():	global des	des = 'region3'

et à nouveau c'est bien la variable 'des' globale qu'on a modifiée et donc elle sera à nouveau lisible depuis n'importe où.

Donc, dans ton cas, je verrais bien un ajout de 'global des partout où tu veux l'écrire

		elif control == self.button10:				 self.panel = xbmcgui.ControlImage(226,120,464,390,panel2)				self.addControl(self.panel)				self.strAction20 = xbmcgui.ControlLabel(383,169,464,20, 'Choisissez votre région:', 'special12', '0xFFFFFFFF')				self.addControl(self.strAction20)				self.list = xbmcgui.ControlList(246,200,369,255)				self.addControl(self.list)				   self.list.reset()			for region in des_list:				self.list.addItem(region)			self.setFocus(self.list)		elif control == self.list:			item = self.list.getSelectedItem()			global des			des = item.getLabel()			self.removeControl(self.list)  			self.removeControl(self.strAction20)			self.removeControl(self.panel)			self.downloadURL(WEB_IMAGE1,LOC_IMAGE1)			self.removeControl(self.icn)			self.icn = xbmcgui.ControlImage(PosImg[0],PosImg[1],PosImg[2],PosImg[3],LOC_IMAGE1)			self.addControl(self.icn)			self.setFocus(self.button1)

Teste donc cette modif !

EDIT:

Pour ton éditeur 'wordpad' c'est chaud !! Cherche sur le net 'pspad' je crois que c un freeware, mais il cartonne ! Un autre aussi écrit lui même en python et pouvant executer du python c'est 'idle' ; il est fournit avec python !!!

Modifié par alexsolex
Lien vers message
Partager sur d'autres sites

Dans ton code tu rajoute juste 'global des' au dessus de 'des = item.getLabel()' c'est bien ca ?

Parce que c'est ce que j'ai fais mais ca veut toujours pas.

Edit : faute de frappe ;)

®Edit : J'arrivais plus à dl la carte car j'essayais de choper celle du matin (boulet) qui n'existe deja plus, mais maintenant ca dl quand meme celle par défault et non celle de la région souhaitée,

la variable des que je définis n'est toujours pas concidérée comme globale, car je l'affiche a l'écran c'est bien le nom de la région voulut mais le lien est celui par défault.

Modifié par Xas
Lien vers message
Partager sur d'autres sites

donc ? ca fonctionne maintenant ? ou tu as un nouveau bug ?

Moi je v dodo

a+

Lien vers message
Partager sur d'autres sites

Je viens d'editer mon message ;)

Edit : J'ai chopé pspad, en effet c'est mieux que wordpad ^^, par contre pas moyen de trouver idle, je tombe a chaque fois sur ram idle, un gestionnaire de mémoire vive.

Redit : En fait, il est bien car on s'y retrouve mieux mais il cause de big problème d'indentation que je ne vois pas avec pspad, mais quand j'ouvre le py avec wordpad ca change tout !

Modifié par Xas
Lien vers message
Partager sur d'autres sites

Le mieux est de refaire toutes les indentations.

Je crois que pour pspad ca se configure, tu peux configurer la touche tabulation pour insérer 4 espaces. Ainsi, plus de mélanges entre les tabulations et les espaces (c à cause des tabulations que ca donne pas pareil, peut être que sous pspad les tabulations valent 4 caractères et dans wordpad les tabulations valent 8 espaces...)

Sinon, pour IDLE, dans mon cas, il était fourni avec la distribution python... Donc il s'est installé avec python, peut être devrais tu réinstaller python sur ton PC (mais j'y pense, tu n'as peut être pas installé python ??)

Lien vers message
Partager sur d'autres sites

Le mieux est de refaire toutes les indentations.

C'est ce que j'ai fais, c'est bien chiant ^^

Je crois que pour pspad ca se configure, tu peux configurer la touche tabulation pour insérer 4 espaces. Ainsi, plus de mélanges entre les tabulations et les espaces (c à cause des tabulations que ca donne pas pareil, peut être que sous pspad les tabulations valent 4 caractères et dans wordpad les tabulations valent 8 espaces...)

Je ne savais pas que ca pouvait changer selon les log.

Sinon, pour IDLE, dans mon cas, il était fourni avec la distribution python... Donc il s'est installé avec python, peut être devrais tu réinstaller python sur ton PC (mais j'y pense, tu n'as peut être pas installé python ??)

Euh ... non blush mais je veux bien que tu me dise qu'est-ce qu'il faut que je chope.

Sinon, j'ai toujours pas trouvé pour changer la variable, au début de mon script j'ai mis :

des_list = ['france','alsace','lorraine']

des = des_list[0]

et dans mon controle :

item = self.list.getSelectedItem()

global des

des = item.getLabel()

Mais ca change rien :unsure:

Lien vers message
Partager sur d'autres sites

Tiens, voici le lien pour télécharger le python 2.4 pour windows : http://www.python.org/ftp/python/2.4.2/python-2.4.2.msi

Il devrait y avoir idle à l'intérieur

Dans ton code tu dois mettre :

item = self.list.getSelectedItem() # renvoi un entier (int)global des #reprend la variable globaledes =  des_list[item] #renvoi le 'item'ième élément de la liste des_list

Lien vers message
Partager sur d'autres sites

Merci pour python, c'est installé, y avait bien idle ;)

Pour le script, j'avais déjà essayé comme ca, j'ai réessayé, on ne sais jamais, mais quand je le marque comme ca, le script ne ferme meme plus la liste quand je sélectionne une région et je peux continuer à me balader dans la liste.

Quand je mets des = item.getLabel(), ca ferme bien la liste, ca prend bien en compte ma variable des (je l'ai affichée a l'ecran) mais ca ne change pas les liens des cartes.

C'est bizare, si tu me dis que c'est comme ca, c'est que ca doit etre comme ca, mais ca veut pas <_<

Edit : en remplacant des = des_list[item] par des = des_list[1], quand on selectionne une région ca ferme la liste, ca prend donc en compte le controle mais le lien des cartes reste toujours inchangé ca ne prends pas la région 1 mais la région 0 celle par défault, ca fait pareil que quand je mets des = item.getLabel()

Reedit : J'ai changer ma liste par un simple bouton :

		elif control == self.button10:			global des			des = des_list[1]			self.strAction23 = xbmcgui.ControlLabel(383,169,464,20, des, 'special12', '0xFFFFFFFF')			self.addControl(self.strAction23)			self.setFocus(self.button9)

Quand je clic dessus, ca me marque a l'ecran la valeur des, ca me marque bien alsace et non france (= des_list[0]), cela doit donc venir de 'global des'

Modifié par Xas
Lien vers message
Partager sur d'autres sites

Bon, c'est très bien finalement ! Très bien parce que moi aussi j'ai bien galéré sur les variables globales ! lol

Si bien que je les fuis comme la peste désormais ! lol

Essaye d'ajouter

global des

au début du script, lorsque tu déclares la variable des

des_list = ['france','alsace','lorraine']

global des

des = des_list[0]

Lien vers message
Partager sur d'autres sites

Marche toujours pas :S

Ca commence a devenir trés chiant c't'histoire ...

Lien vers message
Partager sur d'autres sites

Allez...

J'ai réparé ton script pour la partie 'changement de région'. Je me suis basé sur la version que tu avais mis sur ce forum (en haut de cette page je pense) Mymeteo09...

Je te laisse décortiquer les changements et comprendre comment ca fonctionne ! ;)

Tu peux utiliser pspad, il y a une fonction magique qui te montre les défférences entre 2 fichiers ! Très utile quand tu sais plus où tu en es entre 2 versions !!

a+

Lien vers message
Partager sur d'autres sites

Merci je regarde ca tout de suite, pas eu le temps de passer avant ;)

Edit : Ok, j'ai vu mon erreur, c'était un vraiment un truc tout c.. mais qui change tout :S

Je finiole un peu et je le mets en dl ;)

Redit : en fait en y regardant de plus prés c'était pas aussi simple que ca, mais c'est un truc que je retiendrais !

Modifié par Xas
Lien vers message
Partager sur d'autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

Annonces