Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème sur les Entry avec Tkinter

    5 septembre 2022 à 19:45:46

    Bonjour, je viens vous demander de l'aide car je voudrais que me programme soit en mesure de lire les éléments de plusieurs Entry et de les ajouter dans une liste pour en faire une matrice. Le problème que j'ai est que je n'arrive pas à différencier les différentes Entry que j'ai. Le projet final est d'avoir 81 Entry (pour un jeu de sudoku) et que l'utilisateur puisse entrer les nombres de sa grille dans les différentes Entry et ensuite ma matrice est lue et complétée par une autre fonction non présente ici.

    Merci d'avance pour votre aide :)

    from tkinter import *
    
    app = Tk()
    app.geometry('600x600')
    app.maxsize(600,600)
    app.minsize(600,600)
    
    def ajout_grille():
        sudoku = []
        for x in range(9):
            ligne = []
            for y in range(9):
                nombre = test.get()
                ligne.append(nombre)
            sudoku.append(ligne)
    
        for ligne in sudoku:
            print(ligne)
    
    test1 = Entry(app)
    test1.place(x=10, y=10, width=25, height=25)
    
    test2 = Entry(app)
    test2.place(x=40, y=10, width=25, height=25)
    
    test3 = Entry(app)
    test3.place(x=70, y=10, width=25, height=25)
    
    test4 = Entry(app)
    test4.place(x=100, y=10, width=25, height=25)
    
    test5 = Entry(app)
    test5.place(x=130, y=10, width=25, height=25)
    
    bouton_ajout_grille = Button(app, height=1, width=10, text="Valider votre grille", command=ajout_grille)
    bouton_ajout_grille.pack()
    
    app.mainloop()


    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      5 septembre 2022 à 21:50:17

      Salut !

      Je me suis un peu amusé avec ton script :

      from tkinter import *
       
      app = Tk()
      app.geometry('600x600')
      app.maxsize(600,600)
      app.minsize(600,600)
      
      def check(S):
          if S.isdigit():        
              return True
          else:
              return False
      
      reg = app.register(check)
      
      def key_pressed(event):
          if len(event.widget.get()) > 0 and event.char.isdigit():
              event.widget.delete(0, END)
      
      def key_released(event):
          print(event.widget.indices, event.widget.get())
          
          r,c = event.widget.indices
      
          #Pour naviguer avec les touches directionnelles dans les Entrys
          if event.keysym == 'Up':
              ENTRYS[(max(0,r-1),c)].focus()
          elif event.keysym == 'Down':
              ENTRYS[(min(8,r+1),c)].focus()
          elif event.keysym == 'Right':
              ENTRYS[(r,min(8,c+1))].focus()
          elif event.keysym == 'Left':
              ENTRYS[(r,max(0,c-1))].focus()
       
      def ajout_grille():
          global ENTRYS
          ENTRYS = {}
          for r in range(9):
              for c in range(9):
                  entry = Entry(frame, width=5, justify='center', validate ="key", validatecommand =(reg, '%S'))
                  entry.bind('<Key>', key_pressed)
                  entry.bind('<KeyRelease>', key_released)
                  entry.indices = (r,c)
                  entry.grid(row=r, column=c, ipady=10)
                  ENTRYS[(r,c)] = entry
                  
       
      frame = Frame(app, width=600,height=600)
      frame.pack()
      
      ajout_grille()
      
      app.mainloop()
      

      Comme tu pourras le constater, la matrice se trouve dans le dictionnaire ENTRYS que j'ai créé avec en clé les indices (row, column) et en valeur celle de l'entrée.

      PS : Je t'ai rajouté une fonction de validation : https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/entry-validation.html

      Et une partie navigation avec les touches directionnelles =) 

      -
      Edité par Anonyme 5 septembre 2022 à 21:54:12

      • Partager sur Facebook
      • Partager sur Twitter

      Problème sur les Entry avec Tkinter

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown