OVH Cloud OVH Cloud

Python et OpenGL

5 réponses
Avatar
Nicolas Maupu
Bonjour,

Je developpe actuellement un petit programme en python avec pyopengl.

Je suis confronté à un petit problème :
Je souhaite que l'utilisateur puisse entrer des commandes dans un
terminal s'executant dans la scene (par exemple, entrer D 30
permettrait de pivoter de 30 degre a droite la camera de la scene)

Le probleme est que si j'utilise raw_input, le programme est bloqué
jusqu'a ce que l'utilisateur presse la touche entrée. Ma scène doit
continuer de "vivre" en arrière plan (même avec la fonction
glutIdleFunc())!

Une suggestion ?
Merci

--
Nico

5 réponses

Avatar
F. Petitjean

Bonjour,

Je developpe actuellement un petit programme en python avec pyopengl.

Je suis confronté à un petit problème :
Je souhaite que l'utilisateur puisse entrer des commandes dans un
terminal s'executant dans la scene (par exemple, entrer D 30
permettrait de pivoter de 30 degre a droite la camera de la scene)

Le probleme est que si j'utilise raw_input, le programme est bloqué
jusqu'a ce que l'utilisateur presse la touche entrée. Ma scène doit
continuer de "vivre" en arrière plan (même avec la fonction
glutIdleFunc())!

Une suggestion ?


Mettre la boucle basée sur raw_input() dans un autre fil d'exécution
avec le module threading ? Je ne vois pas d'autre solution à priori.

Avatar
nico
Salut,

Bonjour,

Je developpe actuellement un petit programme en python avec pyopengl.

Je suis confronté à un petit problème :
Je souhaite que l'utilisateur puisse entrer des commandes dans un
terminal s'executant dans la scene (par exemple, entrer D 30
permettrait de pivoter de 30 degre a droite la camera de la scene)

Le probleme est que si j'utilise raw_input, le programme est bloqué
jusqu'a ce que l'utilisateur presse la touche entrée. Ma scène doit
continuer de "vivre" en arrière plan (même avec la fonction
glutIdleFunc())!

Une suggestion ?


Multithreading ?

--
nico

Avatar
Nicolas Maupu

Mettre la boucle basée sur raw_input() dans un autre fil d'exécution
avec le module threading ? Je ne vois pas d'autre solution à priori.
J'ai déjà essayé mais ça ne marche pas non plus :


class MonThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)

def run(self):
while 1:
commande = raw_input(">")
print commande

Je crée un objet de la classe avant la fonction glutMainLoop() et je
le start.

Ca semble fonctionner mais lors de l'appuie sur la touche entrée,
l'instruction print commande n'est pas effectué...

J'avais déjà essayé d'utiliser les threads avec OpenGL mais ça ne
semble pas fonctionner. Peut-être que OpenGL a sa propre gestion des
tâches à executer simultanément et que la création de threads court-
circuite celle d'OpenGL ??

--
Nico

Avatar
Do Re Mi chel La Si Do
Bonsoir !

Utiliser threading, comme il a été indiqué ; ou alors, lancer deux sessions
de Python (deux scripts), qui communiquent par mmap (ou par un autre moyen).

@-salutations

Michel Claveau
Avatar
Laurent Pointal
Nicolas Maupu wrote:
Mettre la boucle basée sur raw_input() dans un autre fil d'exécution
avec le module threading ? Je ne vois pas d'autre solution à priori.


J'ai déjà essayé mais ça ne marche pas non plus :

class MonThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)

def run(self):
while 1:
commande = raw_input(">")
print commande

Je crée un objet de la classe avant la fonction glutMainLoop() et je
le start.

Ca semble fonctionner mais lors de l'appuie sur la touche entrée,
l'instruction print commande n'est pas effectué...


(au cas où...) Un flush quelque part ?

LP.