2017-04-19 6 views
1

J'ai un programme avec une carte sur une toile. Lorsque je défile sur la carte, il affiche sur l'écran la longitude et la latitude de l'emplacement du pointeur de la souris, mis à jour en temps réel. De même, lorsque je bouge la souris, je montre le lever, le coucher du soleil, le lever de la lune, le coucher de la lune et la phase de la lune où je suis à l'écran. Tout fonctionne bien, sauf Ephem ne met évidemment pas à jour en temps réel.Ephem non mise à jour en temps réel

Ceci est la partie spécifique du code qui est exécutée chaque fois que la souris est déplacée.

self.maploc.lat, self.maploc.lon = str(py), str(px) 
sr = str(self.maploc.next_rising(ephem.Sun() 
ss = str(self.maploc.next_setting(ephem.Sun())) 
snr = sr.split(' ') 
sns = ss.split(' ') 
self.maploc.lat, self.maploc.lon = str(py), str(px) 
mr = str(self.maploc.next_rising(ephem.Moon())) 
ms = str(self.maploc.next_setting(ephem.Moon())) 
mn = ephem.Moon() 
mn.compute(self.maploc) 
mnr = mr.split(' ') 
mns = ms.split(' ') 

Je pense courir le mn.compute (self.maploc) ferait une mise à jour complète des coordonnées de la carte, mais il ne fonctionne pas. Accordé hier comme j'ai commencé à bricoler avec cette idée, j'ai remarqué qu'il ne semblait pas faire de mise à jour en direct avec les temps de lever du soleil non plus.

Comment obtenir une mise à jour en temps réel ou puis-je utiliser ephem?

Si je lance le programme, la phase de lune restera toujours la même jusqu'à ce que je ferme le programme et redémarre le programme.

Répondre

0

Vous devrez peut-être réinitialiser la date du maploc, sinon ses routines comme next_rising() ne calculeront probablement que les heures en fonction de la date à laquelle vous l'avez créé.

from ephem import now 
... 
self.maploc.date = now() 

Voilà comment vous pouvez mettre à jour le maploc pour commencer à penser à des calculs d'une nouvelle date et l'heure. Bonne chance!