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 :

saisie de plusieurs lignes


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Points : 32
    Points
    32
    Par défaut saisie de plusieurs lignes
    Bonjour,
    depuis un moment je n'ai pas codé en python est la je me trouve devant un problème j'ai beaucoup cherché pour savoir comment faire pour développer un script qui permet de saisir plusieurs lignes au clavier
    cad j'ai des immeubles un immeuble peut contenir jusqu’à 50 étages pour chaque immeuble je dois saisir ses étages je dois saisir le nom de l'étage (rdc, 1er étage,....) ainsi que la surface je dois avoir quelque chose qui ressemble à ca

    Nom étage surface


    un immeuble peut avoir 10 étage l'autre 15 l'autre 22 etc

    est ce que quelqu’un a une idée sur ca . car si j'utilise des entry il me faut 50 lignes qui dépassent la taille de l’écran
    merci d'avance pour votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Salut,

    Citation Envoyé par THCH66 Voir le message
    est ce que quelqu’un a une idée sur ca . car si j'utilise des entry il me faut 50 lignes qui dépassent la taille de l’écran
    Il est toujours possible de mettre les Entry dans une Frame, la Frame dans le Canvas et des Scrollbar autour... Et joie, il y a des codes sur Internet +/- prêt à l'emploi.

    Après vous pouvez aussi ajouter une sorte de "pagination" : N Entries par pages et on passe d'une page à l'autre pour avoir les Entry suivantes.

    Ou imaginer une interface en fonction des besoins utilisateur.
    note: c'est peut être plus simple de laisser l'utilisateur remplir un fichier texte avec son tableur préféré et lire un CSV correspondant au bâtiment.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Il est toujours possible de mettre les Entry dans une Frame, la Frame dans le Canvas et des Scrollbar autour... Et joie, il y a des codes sur Internet +/- prêt à l'emploi.

    - W
    merci pour cette idée j'ai essayé de coder ça marche pour canvas.text je bloque pour les zones de saisie Entry qui ne suivent pas scrollbar
    voici le code si il y a une aide merci d'avance
    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
    from tkinter import *
    fenetre_Creation_Immeuble=Tk()
    fenetre_Creation_Immeuble.title('CREATION IMMEUBLE')
    fenetre_Creation_Immeuble.geometry("950x750")
    fenetre_Creation_Immeuble.configure(bg = "turquoise1")
     
    NombresEtages=99
     
    Label(fenetre_Creation_Immeuble,bg='turquoise1',text="Nom Etage", font=("Purisa", 10), anchor="w").place(x=510,y=90,height=20, width=100)
    Label(fenetre_Creation_Immeuble,bg='turquoise1',text="Surface en M2", font=("Purisa", 10), anchor="w").place(x=610,y=90,height=20, width=100)
     
    frame=Frame(fenetre_Creation_Immeuble,width=200,height=410)
     
    frame.place(x=510,y=120)
    canvas=Canvas(frame,bg='WHITE',width=200,height=410,scrollregion=(0,0,0,1980))
     
    canvas.place(x=510,y=120)
     
    vbar=Scrollbar(frame,orient=VERTICAL)
    vbar.pack(side=RIGHT,fill=Y)
    vbar.config(command=canvas.yview)
     
    canvas.config(yscrollcommand=vbar.set)
    canvas.pack(side=LEFT,expand=True,fill=BOTH)
     
    Etages=[[0] *2 for i in range(NombresEtages)]
     
    if NombresEtages==1:
     Etages[0][0]="Rez De Chaussé"
    elif NombresEtages==2:
     
                Etages[0][0]="Rez De Chaussé"
                Etages[1][0]="Premier Etage"
    else:
     
                Etages[0][0]="Rez De Chaussé"
                Etages[1][0]="Premier Etage"
     
     
                for i in range(2,NombresEtages):
                    Etages[i][0]=str(i)+" ième Etage"
     
     
     
     
     
     
    for i in range(NombresEtages):
             canvas.create_text(5,((i*20)+10), text=Etages[i][0],fill="red", font=("Purisa", 10),anchor="w")#premiere ligne du canvas
     
     
    Entry(canvas,borderwidth=4,font=("Purisa",10),bg="yellow",justify="center").place(x=150,y=50, height=20, width=100)
     
     
     
    fenetre_Creation_Immeuble.mainloop()

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Salut,

    Il serait préférable d'étudier et de réutiliser les codes qui font çà plutôt que d'essayer de refaire un truc par vous même. Ce n'est pas "simple", çà demande pas mal de boulot.... et on ne va pas pouvoir vous donner plus d'explications que celles qui existent déjà.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Points : 32
    Points
    32
    Par défaut
    bonjour,
    juste une petite question
    afin de finaliser ce que je veux faire
    est ce possible de réduire la largeur d'un champs de saisie Entry place avec .grid avec .place j'utilise widht et avec .grid
    car la largeur standard de Entry est trop grande pour la saisie de nombre à deux caractère
    merci d'avance

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Salut,

    Citation Envoyé par THCH66 Voir le message
    est ce possible de réduire la largeur d'un champs de saisie Entry place avec .grid avec .place j'utilise widht et avec .grid
    La réponse est "oui" et je ne vois pas que viennent faire place, grid, pack là dedans.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Points : 32
    Points
    32
    Par défaut
    bonjour,
    après les conseilles de wiztricks que je remercie en particulier j'ai développer ce bout de code est la je bloque sur une question très importante
    comment lire des Entry avec une boucle, tester chaque Entry si c'est un entier puis quand on tape ENTRER en passe a l'Entry suivant
    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
    from tkinter import *
    import tkinter as tk
    from tkinter import ttk
     
    fenetre_Creation_Immeuble=Tk()
    fenetre_Creation_Immeuble.title('CREATION IMMEUBLE')
    fenetre_Creation_Immeuble.geometry("950x750")
    fenetre_Creation_Immeuble.configure(bg = "turquoise1")
     
     
    def Creation_Canvas_Saisie():
     
          NombresEtages=Nbr_Eta.get()
          if len (NombresEtages)==0:
                return
     
          NombresEtages=int(NombresEtages)
     
          Label(fenetre_Creation_Immeuble,bg='turquoise1',text="Nom Etage", font=("Purisa", 10), anchor="w").place(x=510,y=90,height=20, width=100)
          Label(fenetre_Creation_Immeuble,bg='turquoise1',text="Surface en M2", font=("Purisa", 10), anchor="w").place(x=610,y=90,height=20, width=100)
     
     
          frame = Frame(fenetre_Creation_Immeuble)
          frame.place(x=510,y=120)
     
          canvas = Canvas(frame,width=190,height=410)
          canvas.pack(side="left", fill="both", expand=True)
     
          scrollbar = ttk.Scrollbar(frame, orient="vertical", command=canvas.yview)
          scrollable_frame = Frame(canvas)
          scrollbar.pack(side="right", fill="y")
     
     
          scrollable_frame.bind(
               "<Configure>",
            lambda e: canvas.configure(
               scrollregion=canvas.bbox("all")
               )
            )
     
          canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
     
          canvas.configure(yscrollcommand=scrollbar.set)
     
     
     
          Etages=[[0] *2 for i in range(NombresEtages)]#tableau a deux dimension pour nom et surface de l'etage
     
          if NombresEtages==1:
                Etages[0][0]="Rez De Chaussé"
     
          elif NombresEtages==2:
     
                Etages[0][0]="Rez De Chaussé"
                Etages[1][0]="Premier Etage"
          else:
     
                Etages[0][0]="Rez De Chaussé"
                Etages[1][0]="Premier Etage"
     
                for i in range(2,NombresEtages):
                    Etages[i][0]=str(i)+" ième Etage"
     
          for i in range(NombresEtages):
     
     
              Label(scrollable_frame, text=Etages[i][0], font=("Purisa", 10)).grid(row=i,column=0,sticky='nsw')
     
              Entry(scrollable_frame,font=("Purisa",10),bg ='bisque', fg='maroon',justify="center",width=10).grid(row=i,column=1)
     
     
    LabNbrEta=Label(fenetre_Creation_Immeuble, bg='turquoise1',text="Nombre étages \n 99 Etages Max")
    LabNbrEta.place(x=740,y=20, height=30, width=100)
     
    Nbr_Eta=StringVar()
    NbrEta=Entry(fenetre_Creation_Immeuble, font=("Purisa", 13), bg='white',  justify="left",name="nbreta",textvariable=Nbr_Eta)
    NbrEta.place(x=850,y=20, height=25, width=50)
    NbrEta.bind('<Return>', lambda e, : Creation_Canvas_Saisie())
     
     
     
    fenetre_Creation_Immeuble.mainloop()
    un grand merci

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Salut,

    Citation Envoyé par THCH66 Voir le message
    je bloque sur une question très importante
    comment lire des Entry avec une boucle, tester chaque Entry si c'est un entier puis quand on tape ENTRER en passe a l'Entry suivant
    çà fait un paquet de questions!
    Commençons par la plus facile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> from tkinter import *
    >>> for _ in range(3):
    ...     Entry().pack()
    ...
    >>>
    suffit pour "voir" qu'Enter permet de passer d'une Entry à l'autre.

    Pour lire des Entries dans une boucle, il va falloir fabriquer une liste d'Entry à balayer.

    On peut alors tester si le contenu est un entier... ou utiliser la validation interne au widget Entry comme décrit ici. ou...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    çà fait un paquet de questions!
    Commençons par la plus facile:

    - W
    Bonjour wiztricks
    j'ai fais des modifications à mon code j'ai résolu le problème de la boucle des Entry,saisir que les entiers ,saisir maximum 4 caractères
    je suis arrivé à cette version je ne sais pas si c'est la bonne (si c'est du bricolage )ou pas mais elle
    marche
    alors il ne me reste qu'une seule chose pour fermer ce sujet
    qu'est ce que je dois a jouter a mon code pour que je passe d'un Entry à un Autre automatiquement

    j'ai deux conditions pour passer automatiquement à l'Entry suivant
    soit j'ai une chaîne de 4 caractères je passe directement à l'Entry suivant soit l'utilisateur tape Entrée
    Remarque si c'est le dernier Entry je passe au bouton voir liste
    voici mon code
    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
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    from tkinter import *
    import tkinter as tk
    from tkinter import ttk
     
    fenetre_Creation_Immeuble=Tk()
    fenetre_Creation_Immeuble.title('CREATION IMMEUBLE')
    fenetre_Creation_Immeuble.geometry("950x750")
    fenetre_Creation_Immeuble.configure(bg = "turquoise1")
     
     
    global  Etages
    Etages=[[0] *2 for i in range(20)]
     
    def Creation_Canvas_Saisie():
          global Etages
     
          NombresEtages=Nbr_Eta.get()
          if len (NombresEtages)==0:
                return
     
          NombresEtages=int(NombresEtages)
     
          Label(fenetre_Creation_Immeuble,bg='turquoise1',text="Nom Etage", font=("Purisa", 10), anchor="w").place(x=510,y=90,height=20, width=100)
          Label(fenetre_Creation_Immeuble,bg='turquoise1',text="Surface en M2", font=("Purisa", 10), anchor="w").place(x=610,y=90,height=20, width=100)
     
     
          frame = Frame(fenetre_Creation_Immeuble)
          frame.place(x=510,y=120)
     
          canvas = Canvas(frame,width=190,height=410)
          canvas.pack(side="left", fill="both", expand=True)
     
          scrollbar = ttk.Scrollbar(frame, orient="vertical", command=canvas.yview)
          scrollable_frame = Frame(canvas)
          scrollbar.pack(side="right", fill="y")
     
     
          scrollable_frame.bind(
               "<Configure>",
            lambda e: canvas.configure(
               scrollregion=canvas.bbox("all")
               )
            )
     
          canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
     
          canvas.configure(yscrollcommand=scrollbar.set)
     
     
          Etages=[[0] *2 for i in range(NombresEtages)]#tableau a deux dimension pour nom et surface de l'etage
     
     
          if NombresEtages==1:
                Etages[0][0]="Rez De Chaussé"
     
          elif NombresEtages==2:
     
                Etages[0][0]="Rez De Chaussé"
                Etages[1][0]="Premier Etage"
          else:
     
                Etages[0][0]="Rez De Chaussé"
                Etages[1][0]="Premier Etage"
     
                for i in range(2,NombresEtages):
                    Etages[i][0]=str(i)+" ième Etage"
     
          def OnValidate(Caractere,Chaine,Indice):
     
     
     
              if Caractere.isdigit():
     
     
                if len(Chaine)>=5:
                    return False
     
                if len(Chaine)<5 and len(Chaine)!=0:
     
                    Etages[int(Indice)][1]=int(Chaine)
     
                return True
              else:
                if len(Chaine)!=1:
     
                   Chaine=Chaine[:-1]#pour supprimer le caractere si l'utilisateur tape  un cractere alphabetique entre les entier
     
                   if len(Chaine)<5 and len(Chaine)!=0:
     
                    Etages[int(Indice)][1]=int(Chaine)
     
     
                return False
     
     
          for i in range(NombresEtages):
     
     
              validatecmd = (scrollable_frame.register(OnValidate),'%S', '%P',i)
              Label(scrollable_frame, text=Etages[i][0], font=("Purisa", 10)).grid(row=i,column=0,sticky='nsw')
              Entry(scrollable_frame,font=("Purisa",10),bg ='bisque', fg='maroon',justify="center",width=10,validate="key", vcmd=validatecmd).grid(row=i,column=1)
     
     
    LabNbrEta=Label(fenetre_Creation_Immeuble, bg='turquoise1',text="Nombre étages \n 99 Etages Max")
    LabNbrEta.place(x=740,y=20, height=30, width=100)
     
    Nbr_Eta=StringVar()
    NbrEta=Entry(fenetre_Creation_Immeuble, font=("Purisa", 13), bg='white',  justify="left",name="nbreta",textvariable=Nbr_Eta)
    NbrEta.place(x=850,y=20, height=25, width=50)
    print("NBR etag===",NbrEta)
    NbrEta.bind('<Return>', lambda e, : Creation_Canvas_Saisie())
     
     
    def VOIR_LISTE():
         print("------------------liste des etages-------------------")
         print(Etages)
     
    Voir_Liste = Button(fenetre_Creation_Immeuble, text = "Voir Liste",bg="green", command = VOIR_LISTE)
    Voir_Liste.place(x=500,y=580,height=25, width=100)
     
    fenetre_Creation_Immeuble.mainloop()
    merci d'avance pour votre aide précieuse

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Salut,

    Citation Envoyé par THCH66 Voir le message
    qu'est ce que je dois a jouter a mon code pour que je passe d'un Entry à un Autre automatiquement
    Quelque part, c'est forcer le focus (la saisie clavier) à l'Entry suivante à certaines conditions réalisées sur l'Entry "courante" (pour lesquelles je vous ai déjà mentionné un article sur la validation).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Quelque part, c'est forcer le focus (la saisie clavier) à l'Entry suivante à certaines conditions réalisées sur l'Entry "courante" (pour lesquelles je vous ai déjà mentionné un article sur la validation).

    - W
    merci encore
    j'ai bien regardé ces articles
    le problème c'est que je n'arrive pas à récupérer l'Entry et l'Entry suivant pour pouvoir utiliser le .bind('<Return>', lambda e, :Focus_Suivant())
    si c’était des Entry avec des noms par exemple ENT1=Entry(), ENT2=Entry() la l'utilisation de ENT1.bind('<Return>', lambda e, :ENT2.focus_Set()) est possible mais dans mon cas je ne voie pas.
    j'ai essaye avec une liste de Entry je n'arrive pas

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Points : 32
    Points
    32
    Par défaut
    j'ai essaye de faire ca mais ca ne marche pas non plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
          def Focus_Suivant(Event):
     
              Event.widget.tk_focusNext().focus_set()
     
     
     
          Liste=[''  for i in range(NombresEtages)]
     
          for i in range(NombresEtages):
     
              validatecmd = (scrollable_frame.register(OnValidate),'%S', '%P',i)
              Label(scrollable_frame, text=Etages[i][0], font=("Purisa", 10)).grid(row=i,column=0,sticky='nsw')
              Liste[i]= Entry(scrollable_frame,font=("Purisa",10),bg ='bisque', fg='maroon',justify="center",width=10,validate="key", vcmd=validatecmd).grid(row=i,column=1)
              Liste[i].bind('<Return>', lambda e, :Focus_Suivant(e))
    j'ai cette erreur
    AttributeError: 'NoneType' object has no attribute 'bind'

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Points : 32
    Points
    32
    Par défaut
    c'est bon il me semble que j'ai trouvé le probleme
    il faut faire ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Liste[i]= Entry(scrollable_frame,font=("Purisa",10),bg ='bisque', fg='maroon',justify="center",width=10,validate="key", vcmd=validatecmd)
              Liste[i].grid(row=i,column=1)
              Liste[i].bind('<Return>', lambda e, :Focus_Suivant(e))
    je ne sais pas mais je vais vérifier encore

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Salut,

    Citation Envoyé par THCH66 Voir le message
    si c’était des Entry avec des noms par exemple ENT1=Entry(), ENT2=Entry() la l'utilisation de ENT1.bind('<Return>', lambda e, :ENT2.focus_Set()) est possible mais dans mon cas je ne voie pas.
    Je vous avais suggéré de faire une liste.

    ENT[1] pourrait être le 2ème item de la liste ENT.
    Et si on connaît l'index de l'Entry en cours, on sait calculer l'index de l'Entry suivante.

    Ayez le réflexe de penser "collections" lorsque vous voulez appliquer un peu la même chose à un tas d'objets similaires ....

    Après vous pouvez faire un truc dans ce genre là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import tkinter as tk
     
    root = tk.Tk()
     
    def on_validate(w, s):
        if len(s) == 4:
            e = root.nametowidget(w)
            e.event_generate('<Tab>', when='now')
     
    vcmd = (root.register(on_validate), '%W', '%P')
    for _ in range(4):
        tk.Entry(root, validate="key", vcmd=vcmd).pack()
     
    tk.mainloop()
    Et vous voyez que travailler sur ce détail du code se fait plus facilement sur un brouillon "à côté" que directement "dans" le code...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Points : 32
    Points
    32
    Par défaut
    à priori ça marche bien
    la dernière chose c'est que je passe au focus suivant si le nombre de caractères = 4
    une idée ????????

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Je vous avais suggéré de faire une liste.

    ENT[1] pourrait être le 2ème item de la liste ENT.
    Et si on connaît l'index de l'Entry en cours, on sait calculer l'index de l'Entry suivante.

    Ayez le réflexe de penser "collections" lorsque vous voulez appliquer un peu la même chose à un tas d'objets similaires ....

    Après vous pouvez faire un truc dans ce genre là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import tkinter as tk
     
    root = tk.Tk()
     
    def on_validate(w, s):
        if len(s) == 4:
            e = root.nametowidget(w)
            e.event_generate('<Tab>', when='now')
     
    vcmd = (root.register(on_validate), '%W', '%P')
    for _ in range(4):
        tk.Entry(root, validate="key", vcmd=vcmd).pack()
     
    tk.mainloop()
    Et vous voyez que travailler sur ce détail du code se fait plus facilement sur un brouillon "à côté" que directement "dans" le code...

    - W
    merci pour les conseils
    ce code que vous avez poster je l'ai essayé mais ça ne donne rien
    1) le premier caractère saisie ne s'affiche pas
    2)on peut saisir plusieurs caractère plus que 4

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Salut,

    Citation Envoyé par THCH66 Voir le message
    ce code que vous avez poster je l'ai essayé mais ça ne donne rien
    1) le premier caractère saisie ne s'affiche pas
    2)on peut saisir plusieurs caractère plus que 4
    Vous avez lu le petit tuto. et devriez constater que j'ai omis un return True.
    Pour le premier caractère, il faut cliquer sur une des Entry (ou taper <Tab>) pour lui donner le focus.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Vous avez lu le petit tuto. et devriez constater que j'ai omis un return True.
    Pour le premier caractère, il faut cliquer sur une des Entry (ou taper <Tab>) pour lui donner le focus.

    - W
    un grand merci pour cette aide précieuse j'adopte ton code que auquel j'ai ajouter une modification pour quitter le focus après la touche Entrée
    je me permet de demander comment faire pour au dernier Entry il va vers un bouton bien déterminé

    après ça j'appuis sur résolu avec un GRAND MERCI

  19. #19
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Citation Envoyé par THCH66 Voir le message
    je me permet de demander comment faire pour au dernier Entry il va vers un bouton bien déterminé
    Réfléchissez un peu par vous même: comment repérer ce dernier Entry? Dans mon code, il faudra peut être stocker la dernière Entry créée dans un variable et tester si le widget "rempli" est le dernier. Dans votre code, vous remplissez un tableau et à priori il y a autant d'Entry que de lignes dans le tableau, donc une autre stratégie est possible.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Réfléchissez un peu par vous même: comment repérer ce dernier Entry? Dans mon code, il faudra peut être stocker la dernière Entry créée dans un variable et tester si le widget "rempli" est le dernier. Dans votre code, vous remplissez un tableau et à priori il y a autant d'Entry que de lignes dans le tableau, donc une autre stratégie est possible.

    - W
    j'ai choisie votre code alors j'ai essaye de récuperer le nom par w.title() ca donne" .!Frame.!Canvas.!Frame.Nometage4"
    j'ai une variable qui me donne ".!frame.!canvas.!frame.nometage4" si je fais le teste ca ne marche pas car le premier caractère est un majuscule dans l'un et minuscule dans l'autre alors pour contourner ca j'ai stocker " .!Frame.!Canvas.!Frame.Nometage4" dans une variable et que je compare avec w.title() je sens que ce n'est pas ça sauf s'il y a un moyen d'avoir title() en minuscule ou bien extraire la dernière partie de title() qui est nometage4

Discussions similaires

  1. [XL-2007] VBA Compléter ligne de date saisie + compléter plusieurs colonnes à chaque nouvelle tâche
    Par illiansoustelle dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/04/2017, 08h12
  2. Réponses: 2
    Dernier message: 15/03/2012, 01h11
  3. Enregistrer plusieurs lignes saisies d'un datagridview
    Par devman2011 dans le forum VB.NET
    Réponses: 4
    Dernier message: 17/12/2011, 00h14
  4. Réponses: 14
    Dernier message: 09/04/2004, 13h44
  5. Define sur plusieurs lignes
    Par Gogoye dans le forum C
    Réponses: 6
    Dernier message: 06/10/2003, 11h45

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