2017-08-24 1 views
2

Sous un certain délai, j'ai besoin de l'utilisateur pour entrer une phrase spécifique.python - entrée utilisateur temporisée

Par exemple, l'utilisateur doit écrire ci-dessous peine de moins de 10 secondes:

Hello! World. 

Cependant, si l'utilisateur ne parvient pas à terminer une phrase complète alors tout ce qu'on a écrit devrait être acceptée. Donc, si on est capable d'écrire seulement Hello! Wo alors il devrait être stocké.

Problème - Si l'utilisateur ne clique pas sur Retour/Entrée avant l'heure, rien n'est enregistré. Comment surmonter cela? Voici mon approche -

import time 
from threading import Thread 

print('Hello! World') 
user = None 

def check(): 
    time.sleep(10) 
    if user != None: 
     return 
    print ("Too Slow") 

Thread(target = check).start() 

user = input("Enter above string: \n") 
+2

Check this out: https://stackoverflow.com/questions/3523174/raw-input-in-python-without-pressing-enter –

+0

essayer avec clavier listner – Gahan

Répondre

1

Je prendrais une approche différente (qui ne nécessite pas de filetage); Je voudrais enregistrer l'heure de fin actuelle des données juste avant d'imprimer "Bonjour tout le monde", puis comparer l'heure actuelle par la suite.

from datetime import datetime, timedelta 

start = datetime.now() 
print("Hello world!") 
if input() == "Hellow world!" and datetime.now()<=start + timedelta(seconds = 10): 
    #the user got it right 
else: 
    #the user was either too slow or got it wrong 
+0

je dois mettre un terme à l'utilisateur le temps exact spécifié sinon votre approche aurait pu être utile. – dataLeo

+0

Ensuite, vous ne pouvez pas vraiment utiliser input() – Treehee

+0

peut-être essayer d'utiliser pygame pour ce genre de chose;) – Treehee

1

Pour ce faire, vous auriez donc devez créer votre propre fenêtre avec votre gestionnaire d'événements très propre qui détecterait chaque fois que l'utilisateur a frappé une touche de son clavier. La méthode standard input() ou même les widgets textControl personnalisés dans wxPython sont cool, mais attend toujours que l'utilisateur appuie sur la touche Entrée. Donc, je pense malheureusement que vous devrez utiliser une bibliothèque GUI (comme wxpython, qui correspond à l'apparence native de votre système d'exploitation et un tas de widgets utiles), et prendre soin de la gestion des événements par lui-même. Si vous préférez implémenter un délai d'expiration que cette interface graphique, vous pouvez exécuter l'entrée utilisateur dans un thread et démarrer immédiatement le second avec le temporisateur. Ensuite, écrivez un gestionnaire qui tuerait le thread d'entrée lorsque le minuteur a fini et vice versa. Espoir j'ai aidé :)