Partage
  • Partager sur Facebook
  • Partager sur Twitter

Non-affichage d'une fenêtre créée

Sujet résolu
    8 août 2011 à 0:25:08

    Bonjour, voici le code dont on va parler :
    # -*- coding: cp1252 -*-
    from Tkinter import*
    
    liste_alphabet_essai = []
    
    fen = Tk()
    fen.title("Aide au dechiffrement")
    fen.geometry("600x300")
    Label(fen, text = "DECHIFFR'TOUT ! ", fg = "red").grid(column = 0, row = 0)
    fra = Frame(fen)
    fra.grid(column = 1, row = 0)
    
    #Tout pour créer la 1ère liste boite
    fra1 = Frame(fra)
    fra1.grid(column = 0)
    listeboite = Listbox(fra1)
    defilement = Scrollbar(fra1)
    
    al = "a b c d e f g h i j k l m n o p q r s t u v w x y z"
    dico = {}
    
    
    #dictionnaire permettant de connaitre l'indice d'une lettre
    alphabet = al.split(" ")
    a = -1
    for carac in alphabet:
        a = a + 1
        dico[carac] = a
        listeboite.insert(END, carac)
    
    defilement.config(command = listeboite.yview)
    listeboite.config(yscrollcommand = defilement.set)
    listeboite.pack(side = LEFT, fill = Y)
    defilement.pack(side = RIGHT, fill = Y)
    
    def capter_lettre(event):
        lettre = listeboite.get(listeboite.curselection())
        listeboite.delete(dico[lettre])
        listeboite_essai.insert(END, lettre)
        liste_alphabet_essai.append(lettre)
        return lettre
    
    
    
    listeboite.bind('<Double-1>', capter_lettre)
    
    #Tout pour créer la 2ème liste boite
    fra2 = Frame(fra)
    fra2.grid(column = 2)
            
    listeboite_essai = Listbox(fra)
    defilement_essai = Scrollbar(fra)
    defilement_essai.config(command = listeboite_essai.yview)
    listeboite_essai.config(yscrollcommand = defilement_essai.set)
    listeboite_essai.pack(side = LEFT, fill = Y)
    defilement_essai.pack(side = RIGHT, fill = Y)
    
    #Bouton pour réinitialiser la liste
    
    def vider():
        listeboite_essai.delete(first = 0, end = END)
        liste_alphabet_essai = []
        listeboite.delete(first = 0, end = END)
        for carac in alphabet:
            listeboite.insert(END, carac)
    
    Button(fra1, text = "REINITIALISER", command = vider).grid(column = 1)
    
    fen.mainloop()
    

    Voici un mini-logiciel, qui, une fois fini, permettra d'aider une personne à déchiffrer un texte codé avec des algorithmes de chiffrement tel que celui de substitution et celui de Vigenère. Je n'en suis qu'à l'étape de la disposition des widgets et je rencontre le problème suivant.

    LE PROBLEME

    Ce code ne rencontre aucune erreur sauf qu'une fois compilé, il semble s'arrêter à "fen.mainloop()" : la fenêtre ne veut pas s'afficher. Je ne comprends pas pourquoi puisqu'il n'a aucune erreur. Il semblerait que cela soit à cause du grand nombre de widgets placés mais alors, comment résoudre cela?

    Je vous remercie d'avance du temps que vous allez passer à résoudre cela.
    • Partager sur Facebook
    • Partager sur Twitter
      8 août 2011 à 3:08:22

      Bonsoir peut-être une piste:

      Dans votre code:
      #Tout pour créer la 2ème liste boite
      fra2 = Frame(fra)
      fra2.grid(column = 2)
              
      listeboite_essai = Listbox(fra)
      defilement_essai = Scrollbar(fra)
      defilement_essai.config(command = listeboite_essai.yview)
      listeboite_essai.config(yscrollcommand = defilement_essai.set)
      listeboite_essai.pack(side = LEFT, fill = Y)
      defilement_essai.pack(side = RIGHT, fill = Y)
      
      #Bouton pour réinitialiser la liste
      
      def vider():
          listeboite_essai.delete(first = 0, end = END)
          liste_alphabet_essai = []
          listeboite.delete(first = 0, end = END)
          for carac in alphabet:
              listeboite.insert(END, carac)
      
      Button(fra1, text = "REINITIALISER", command = vider).grid(column = 1)
      


      Vous créez une frame2 que vous n'utilisez pas.

      Voici un code, je ne sais pas si visuellement cela correspond à ce que vous voulez faire mais vous pouvez le modifier à votre guise:

      from tkinter import *
      
      def capter_lettre(event):
          lettre = listeboite.get(listeboite.curselection())
          listeboite.delete(dico[lettre])
          listeboite_essai.insert(END, lettre)
          liste_alphabet_essai.append(lettre)
          return lettre
      
      def vider():
          listeboite_essai.delete(first = 0, end=END)
          liste_alphabet_essai = []
          listeboite.delete(first = 0, end = END)
          for carac in alphabet:
              listeboite.insert(END, carac)
      
      root = Tk()
      root.title('Aide au déchiffrement')
      root.geometry('600x300')
      
      Label(root,text ="DECHIFFR'TOUT !",fg="red").grid(row=0,column=0,columnspan=2)
      
      # Frame principale:
      fra = Frame(root)
      fra.grid(row=1,column=0)
      
      # Frame 1:
      fra1 = Frame(fra)
      fra1.grid(row=0,column=0)
      listeboite = Listbox(fra1)
      listeboite.pack(side = LEFT, fill = Y)
      defilement = Scrollbar(fra1)
      defilement.pack(side = RIGHT, fill = Y)
      defilement.config(command = listeboite.yview)
      listeboite.config(yscrollcommand = defilement.set)
      
      # Frame 2:
      fra2 = Frame(fra)
      fra2.grid(row=0,column=3)
      listeboite_essai = Listbox(fra2)
      listeboite_essai.pack(side = LEFT, fill = Y)
      defilement_essai = Scrollbar(fra2)
      defilement_essai.pack(side = RIGHT, fill = Y)
      defilement_essai.config(command = listeboite_essai.yview)
      listeboite_essai.config(yscrollcommand = defilement_essai.set)
      
      # Button relier à la frame principale:
      Button(fra, text = "REINITIALISER", command = vider).grid(row=1,column=2)
      
      liste_alphabet_essai = []
      al = "a b c d e f g h i j k l m n o p q r s t u v w x y z"
      dico = {}
      alphabet = al.split(" ")
      a = -1
      for carac in alphabet:
          a = a + 1
          dico[carac] = a
          listeboite.insert(END, carac)
      
      listeboite.bind('<Double-1>', capter_lettre)
      
      root.mainloop()
      


      • Partager sur Facebook
      • Partager sur Twitter
        8 août 2011 à 11:04:13

        Je te conseille de placer tes widgets sur un canvas et ensuite faire pack() dessus.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          8 août 2011 à 11:55:44

          Ça devient difficilement gérable, il faudrait déjà un minimum s'organiser surtout quand on utilise pas la POO.

          Citation

          Je te conseille de placer tes widgets sur un canvas et ensuite faire pack() dessus.



          canvas ou frame?

          Pourquoi pack() et pas grid?

          On peut bien gérer avec grid, il suffit d'être organisé (un petit dessin).

          Citation

          Voici un mini-logiciel, qui, une fois fini, permettra d'aider une personne à déchiffrer un texte codé avec des algorithmes de chiffrement tel que celui de substitution et celui de Vigenère. Je n'en suis qu'à l'étape de la disposition des widgets et je rencontre le problème suivant.



          t'imagines quand tu vas interagir entre tes widgets?

          Citation

          Il semblerait que cela soit à cause du grand nombre de widgets placés



          tkinter n'est pas limité à ce point là ;)

          Citation

          comment résoudre cela?



          En faisant un dessin :)

          Edit: J'oubliais

          Citation

          déchiffrer un texte codé avec des algorithmes



          Il est préférable de faire ce genre de chose dans un autre fichier .py et d'importer ensuite ce module dans ce fichier
          • Partager sur Facebook
          • Partager sur Twitter

          Non-affichage d'une fenêtre créée

          × 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