IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Choix de l'utilisateur dans un menu


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut Choix de l'utilisateur dans un menu
    Bonjour,

    j'aimerais savoir comment faire pour demander à l'tilisateur de choisir entre 2 options, du genre ceci:

    toto[25> main.py
    1.a
    2.b
    Choisir entre a et b?

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    la fonction clé est raw_input qui récupère une entrée clavier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #python 2.x
    print "1.a"
    print "2.b"
    while 1:
        i = raw_input("Choisissez 1 ou 2: ")
        if i not in ['1', '2']:
            print "Choix incorrect !"
        else:
            break

  3. #3
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    La question est très générique : Vous parlez d'un menu et le code donné est pour la console. Que voulez vous faire exactement ?

    Dans l'attente:
    Comme indiqué au début (#python 2.x) le code de kango ne fonctionne que sous Python 2.x
    Sous Python 3 raw_input est remplacé par input et print est une fonction.
    Voici donc quelque chose de plus universel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    #
    #
    from sys import version
     
    if version[0] == "3":
        raw_input = input
     
    print("1.a")
    print("2.b")
    while 1:
        reponse = raw_input("Choisissez 1 ou 2: ")
        if reponse in ['1', '2']:
            break
        else:
            print ("Choix incorrect !")
    print(reponse)
    @+

    Edit:
    Puisque je vous en parle dans un autre sujet kali38 et pour le fun

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    #
    #
    import sys
     
     
    class Getch:
        def __init__(self):
            if sys.platform == 'linux2':
                self.impl = _GetchUnix()
            elif sys.platform == 'win32':
                self.impl = _GetchWindows()
            elif sys.platform == 'darwin':
                self.impl = _GetchMac()
            else:
                raise EnvironmentError("System not supported")
     
        def __call__(self):
            return self.impl()
     
     
    class _GetchUnix:
        def __init__(self):
            import tty
     
        def __call__(self):
            import tty, termios
            _fd = sys.stdin.fileno()
            _old_settings = termios.tcgetattr(_fd)
            try:
                tty.setraw(sys.stdin.fileno())
                ch = sys.stdin.read(1)
            finally:
                termios.tcsetattr(_fd, termios.TCSADRAIN, _old_settings)
            return ch
     
     
    class _GetchWindows:
        def __init__(self):
            import msvcrt
     
        def __call__(self):
            import msvcrt
            import time
            while not msvcrt.kbhit():
                time.sleep(0.1)
            return msvcrt.getch()
     
     
    class _GetchMac:
        def __init__(self):
            import Carbon
            Carbon.Evt
     
        def __call__(self):
            import Carbon
            if Carbon.Evt.EventAvail(0x0008)[0] == 0:
                return ''
            else:
                (what, msg, when, where, mod) = Carbon.Evt.GetNextEvent(0x0008)[1]
                return chr(msg & 0x000000FF)
     
     
    getch = Getch()
    print("1.a")
    print("2.b")
    sys.stdout.write("Choisissez 1 ou 2: ")
    while 1:
        reponse = getch()
        if reponse in ['1', '2']:
            break
    print(reponse)

  4. #4
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Citation Envoyé par PauseKawa Voir le message
    Puisque je vous en parle dans un autre sujet kali38 et pour le fun
    je suppose que le getch() doit être bloquant? Dans ce cas, ça ne marche pas sous python 2.7 windows xp. Je peux juste dire que ça prend tout le temps CPU, donc à priori c'est du polling brutal sous cette config.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    getch = Getch()
    print("1.a")
    print("2.b")
    sys.stdout.write("Choisissez 1 ou 2: ")
    while 1:
        reponse = getch()
        if reponse == '':
            sys.stdout.write('<>')
        else:
            sys.stdout.write("%02x "%ord((reponse[0])))
    print(reponse)
    A+

    Pfeuh

  5. #5
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Merci pour l'info pfeuh.

    Ceci devrais calmer le jeu (je pense, pas de poste Windows pour tester)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class _GetchWindows:
        def __init__(self):
            import msvcrt
     
        def __call__(self):
            import msvcrt
            import time
            while not msvcrt.kbhit():
                time.sleep(0.1)
            return msvcrt.getch()
    (code modifier dans ce sens)

  6. #6
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Ceci devrais calmer le jeu (je pense, pas de poste Windows pour tester)
    Effectivement, comme ça, ça marche nickel. Si on lance le script dans une console, c'est parfait. Par contre si on le lance en utilisant la console de Scite, le msvcrt.kbhit() ne détecte absolument rien. On va dire que c'est normal, j'ai déjà constaté des comportements rebelles sur la console de Scite, je ne cherche même plus à comprendre.

    A+

    Pfeuh

Discussions similaires

  1. [Débutant] Mettre en gras l'item selectionné par l'utilisateur dans un menu - C#
    Par Pynouz dans le forum ASP.NET
    Réponses: 6
    Dernier message: 29/06/2011, 11h12
  2. choix d'un utilisateur dans un script shell
    Par youcefinform dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 08/08/2009, 15h42
  3. Réponses: 2
    Dernier message: 26/08/2008, 14h40
  4. [MySQL] afficher le choix éffectué dans un menu déroulant
    Par qeumarh dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/05/2008, 12h08
  5. [JMenu] Boutons de choix dans le menu
    Par mister3957 dans le forum Composants
    Réponses: 5
    Dernier message: 24/10/2005, 20h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo