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

Tkinter Python Discussion :

saisie simultanée dans deux zones différentes


Sujet :

Tkinter Python

Vue hybride

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Par défaut saisie simultanée dans deux zones différentes
    Bonjour,

    Je suis toujours un très petit débutant en python et je voulais savoir s'il était possible qu'une saisie au clavier dans un éditeur (par exemple sous IDLE) puisse apparaître aussi dans un champ de type Entry (ou autre) de tkinter.
    Avec le code ci-dessous, je ne peux saisir que directement dans le champ texte_saisi=tkinter.Entry
    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
     
    import tkinter
     
    def main():
        #Création de la fenêtre principale nommée racine
        racine=tkinter.Tk()
        racine.title("Principale")
    #Création de <<bouton>> de type Button pour fermer l'application
        bouton=tkinter.Button(racine,text='Quitter',command=racine.destroy)
        bouton.pack(side=tkinter.BOTTOM)
     
    #Création de <<zone_saisie>> de type Entry où est tapé le texte
        texte_saisi=tkinter.StringVar()
        zone_saisie=tkinter.Entry(racine,textvariable=texte_saisi,width=80)
        zone_saisie.pack()
     
        racine.mainloop()
     
    if __name__ == '__main__':
        main()
    Maintenant je souhaiterais que le texte que je tape sur Idle apparaisse simultanément dans le champ <<zone_saisie>>; est-ce possible?


    Merci pour vos réponses.

    Gabriel

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 035
    Par défaut
    Voir du côté de event et tkinter

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Par défaut
    OK merci pour le lien.

    Je vais analyser tout çà...

    Gabriel

  4. #4
    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,

    Cela ne fonctionneras pas avec les events Tkinter en dehors de ce qui concerne l'instance Tk().
    Si vous voulez capturer la frappe cela se passe au niveau système (msvcrt.getch() sous Windows et sans doute win32 (Pas trop mon domaine: Lire les exemples vb), Carbon.Evt sous Mac, tty/termios sous Tux...).
    Une recherche de getch sur le forum vous montreras des exemples.
    J'ai cela qui 'traine'
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    #
    #
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
    import threading
    import sys
     
    class SetAffichage(threading.Thread):
        def __init__(self):
            threading.Thread.__init__(self)
            self._stopevent = threading.Event()
            self._getch = _Getch()
     
        def run(self):
            while not self._stopevent.isSet():
                _lettre = self._getch()
                if _lettre.isalpha():
                    # A eviter bien sur mais pour simplifier l'exemple.
                    l['text'] = _lettre
     
        def stop(self):
            self._stopevent.set()
     
    class _Getch:
        def __init__(self):
            if sys.platform == 'linux2':
                self.getch = _GetchUnix()
            elif sys.platform == 'win32':
                self.getch = _GetchWindows()
            elif sys.platform == 'darwin':
                self.getch = _GetchMac()
            else:
                pass # TODO
     
        def __call__(self):
            return self.getch()
     
    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
     
        def __call__(self):
            import Carbon
            # A finir
            if Carbon.Evt.EventAvail(0x0008)[0] == 0:
                return ''
            else:
                (what, msg, when, where, mod) = Carbon.Evt.GetNextEvent(0x0008)
                return chr(msg & 0x000000FF)
     
    def Intercepte(event=None):
        trhvar.stop()
        root.destroy()
        sys.exit(0)
     
    root = Tk.Tk()
    root.protocol("WM_DELETE_WINDOW", Intercepte)
    root.bind('<3>', Intercepte)
    root.bind("<Control-Key-c>", Intercepte)
    Tk.Label(root, bg='white', fg='red', text='test fullscreen').pack(pady=10)
    l = Tk.Label(root, bg='white', width=50)
    l.pack(pady=10)
    Tk.Button(root, text='Quitter', command=Intercepte).pack()
    root.geometry("%dx%d+0+0"% (root.winfo_screenwidth(), root.winfo_screenheight()))
    root['bg'] = 'black'
    root.wm_attributes("-topmost", 1, "-fullscreen", 1)
    # root.overrideredirect(1)
    trhvar = SetAffichage() # Utiliser .after() plutot qu'un thread. thread ici pour l'exemple.
    trhvar.start()
    root.mainloop()
    @+

    Edit : Et pyhook

  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
    Rien dit (j'ai tester sous linux et cela ne fonctionne pas).
    Regardez du coté de pyhook.

  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
    Salut,

    As tu vraiment besoin de passer par une saisie console? Parce qu'on peut faire une saisie en graphique telle que tu la désires en console.

    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import sys
    try:
        import tkinter
    except:
        import Tkinter as tkinter
    import tkSimpleDialog
     
    class GRABBED_INPUT(tkinter.Toplevel):
        def __init__(self, stringvar, status_var, prompt):
            tkinter.Toplevel.__init__(self)
            self.title(sys.argv[0])
            self.status_var = status_var
            self.status_var.set(True)
            tkinter.Label(self, text=prompt).pack()
            tkinter.Entry(self, textvariable=stringvar, width=80).pack()
            tkinter.Button(self, text="OK", width=8, command=self.ok).pack()
            tkinter.Button(self, text="CANCEL", width=8, command=self.cancel).pack()
            self.protocol('WM_DELETE_WINDOW', self.cancel)
     
        def grab(self):
            self.grab_set()
            self.focus()
            self.mainloop()
     
        def ok(self):
            self.quit()
            self.destroy()
     
        def cancel(self):
            self.status_var.set(False)
            self.ok()
     
    def askTkStringVar(stringvar, prompt):
        old_value = stringvar.get()
        status_var = tkinter.BooleanVar()
        win = GRABBED_INPUT(stringvar, status_var, prompt)
        win.grab()
        if win.status_var.get() == False:
            stringvar.set(old_value)
     
    if __name__ == '__main__':
     
        racine=tkinter.Tk()
        racine.title(sys.argv[0])
        texte_saisi=tkinter.StringVar(value='azerty')
        bouton=tkinter.Button(racine,text='Saisir',command=lambda stringvar=texte_saisi, prompt="Entrez une chaine":askTkStringVar(stringvar, prompt)).pack()
        for x in range(5):
            tkinter.Entry(racine, textvariable=texte_saisi, width=80).pack()
        racine.mainloop()

Discussions similaires

  1. Ecrire dans deux fichiers différent
    Par Diablo_22 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 09/08/2007, 16h11
  2. [IOException] Ecriture dans deux fichiers différents
    Par arkheron dans le forum Langage
    Réponses: 3
    Dernier message: 04/06/2007, 12h00
  3. Faire apparaitre un DIV dans une zone différente
    Par ThomasH dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 23/10/2006, 14h45
  4. [Conception] Inscription simultanée sur deux sites différents
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 20/04/2006, 10h28

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