Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème avec une commande en Tkinter

Sujet résolu
    3 novembre 2011 à 15:09:04

    Bonjour,
    Je vous explique, je dois refaire le programme de gestion de la bibliothèque de mon école. Je suis actuellement en train de créer les différentes fenêtres avec Tkinter. Voici le code :

    from tkinter import *
    
    def ouvrages_fen ():
        global fenetre
        detruire()
        fenetre = 'ouvrages'
    
        global ouvrages
        ouvrages = Tk()
        ouvrages.title ("Ouvrages")
        ouvrages.geometry("3000x850")
        ouvrages.configure(bg = 'darkblue')
    
        global liste_ouvrages
        liste_ouvrages = Frame(ouvrages, width = 1500, height = 400)
        liste_ouvrages.place(x = 50, y = 250)
        
        text_auteur = Label(ouvrages, text = 'Recherche par auteur :', font = 'arial', bg='yellow')
        text_auteur.place(x = 50, y = 90)
        global auteur
        auteur = Entry(ouvrages, font = 'arial')
        auteur.place(x = 230, y = 90)
        
        text_titre = Label(ouvrages, text = 'Recherche par titre :', font = 'arial', bg = 'yellow')
        text_titre.place(x = 460, y = 90)
        global titre
        titre = Entry(ouvrages, font = 'arial')
        titre.place(x = 630, y = 90)
        
        text_genre = Label(ouvrages, text = 'Recherche par genre :', font = 'arial', bg = 'yellow')
        text_genre.place(x = 850, y = 90)
        global genre
        genre = Entry(ouvrages, font = 'arial')
        genre.place(x = 1030, y = 90)
    
        recherche = Button (ouvrages, width = 20, height = 1, font = 'arial', bg = 'yellow', text = 'Recherche', command = lecture_ouvrages)
        recherche.place(x = 1250, y = 90)
    
        nouveau = Button(ouvrages, width = 20, height = 1, font = 'arial', bg = 'yellow', text = 'Ajouter un nouvel ouvrage', command = ouvrages_new)
        nouveau.place(x = 700, y = 200)
    
        libelle(1, 2, 3, 4, ouvrages)
       
        ouvrages.mainloop()
    
    def ouvrages_new() :
        global fenetre
        detruire()
        fenetre = 'new_ouvrages'
    
        global ouvrages_new
        ouvrages_new = Tk()
        ouvrages_new.title("Ajouter un nouvel ouvrage")
        ouvrages_new.geometry("850x700")
        ouvrages_new.configure(bg = 'darkblue')
    
        num_label = Label(ouvrages_new, bg = 'yellow', text = 'N° ID :', font = 'arial')
        num_label.place(x = 300, y = 100)
        num_id = Label(ouvrages_new, text = 'A DEFINIR', fg = 'red', font='arial')
        num_id.place(x = 400, y = 100)
        titre_txt = Label(ouvrages_new, bg = 'yellow', text = 'Titre :', font = 'arial')
        titre_txt.place(x = 300, y = 150)
        titre = Entry(ouvrages_new, font = 'arial')
        titre.place(x = 400, y = 150)
        auteur_txt = Label(ouvrages_new, bg = 'yellow', text = 'Auteur :', font = 'arial')
        auteur_txt.place(x = 300, y = 200)
        auteur = Entry(ouvrages_new, font = 'arial')
        auteur.place(x = 400, y = 200)
        type_txt = Label(ouvrages_new, bg = 'yellow', text = 'Type :', font = 'arial')
        type_txt.place(x = 300, y = 250)
        type_entr = Entry (ouvrages_new, font = 'arial')
        type_entr.place(x = 400, y = 250)
        etat_txt = Label(ouvrages_new, bg = 'yellow', text = 'Etat :', font = 'arial')
        etat_txt.place(x = 300, y = 300)
        etat = Entry(ouvrages_new, font = 'arial')
        etat.place(x = 400, y = 300)
    
        sauver = Button(ouvrages_new, bg = 'yellow', text = 'Ajouter', font = 'arial', width = 40, height = 2, command = sauvegarde)
        sauver.place(x = 250, y = 400)
        annuler = Button(ouvrages_new, bg = 'yellow', text = 'Annuler', font = 'arial', command = ouvrages_fen, width = 40, height = 2)
        annuler.place(x = 250, y = 500)
    
        ouvrages_new.mainloop()
    
    def sauvegarde () :
        global fenetre
        if (fenetre == 'new_ouvrages') :
            #entrée de la sauvegarde
            ouvrages_fen()
    
    def lecture_ouvrages () :
        print(auteur.get())
        print (titre.get())
        print (genre.get())
        
    def lecteurs_fen () :
        global fenetre
        detruire ()
        fenetre = 'lecteurs'
    
        global lecteurs
        lecteurs = Tk()
        lecteurs.title("Lecteurs")
        lecteurs.geometry("3000x850")
        lecteurs.configure(bg = 'darkblue')
    
        liste_lecteurs = Frame(lecteurs, width =500, height = 500)
        liste_lecteurs.place(x = 50, y = 150)
    
        text_nom = Label(lecteurs, font = 'arial', text = "Nom de l'élève :", bg = 'yellow')
        text_nom.place(x = 50, y = 90)
        nom = Entry(lecteurs, font = 'arial')
        nom.place (x = 230, y = 90)
    
        libelle (0, 2, 3, 4, lecteurs)
    
        lecteurs.mainloop()
    
    def detruire () :
        global fenetre
        if (fenetre == 'accueil') :
            accueil.destroy()
        elif (fenetre == 'ouvrages'):
            ouvrages.destroy()
        elif (fenetre == 'lecteurs'):
            lecteurs.destroy()
        elif (fenetre == 'new_ouvrages') :
            ouvrages_new.destroy()
    
    def libelle (a, b, c, d, fen) :
        liste = ['Ouvrages', 'Lecteurs', 'Revues', 'Statistiques', 'Communications diverses']
        fonctions = [ouvrages_fen, lecteurs_fen, print(c), print(d), print(c+d)]
        bou1 = Button (fen, bg = 'lightblue', text = liste[a], width = 30, height = 3, font = 'arial', command = fonctions[a])
        bou1.place (x = 50, y = 700)
        bou2 = Button (fen, bg = 'lightblue', text = liste[b], width = 30, height = 3, font = 'arial', command = fonctions[b])
        bou2.place(x = 350, y = 700)
        bou3 = Button (fen, bg = 'lightblue', text = liste[c], width = 30, height = 3, font = 'arial')
        bou3.place(x = 650, y = 700)
        bou4 = Button (fen, bg = 'lightblue', text = liste[d], width = 30, height = 3, font = 'arial')
        bou4.place(x = 950, y = 700)
        quitter = Button(fen, bg = 'lightblue', text = 'QUITTER', fg = 'red', font = 'arial', width = 30, height = 3, command = fen.destroy)
        quitter.place(x = 1250, y = 700)
            
    def accueil_fen () :
        global fenetre
        fenetre = 'accueil'     # variable permettant de savoir de quel écran l'on provient
    
        global accueil
        accueil = Tk()
        accueil.title("Accueil")
        accueil.geometry("3000x850")
        accueil.configure(bg = 'darkblue')
        
        ouvrages_bt = Button(accueil, bg = 'lightblue', text = 'Ouvrages', width = 40, height = 5, font = 'arial',command = ouvrages_fen)
        ouvrages_bt.place(x = 400, y = 130)
        
        lecteurs_bt = Button(accueil, bg='lightblue', text = 'Lecteurs', width = 40, height = 5, font = 'arial', command = lecteurs_fen)
        lecteurs_bt.place(x = 400, y = 310)
        
        revues_bt = Button(accueil, bg = 'lightblue', text = 'Revues', width = 40, height = 5, font = 'arial')
        revues_bt.place(x = 800 , y = 130)
        
        stats_bt = Button(accueil, bg = 'lightblue', text = 'Statistiques', width = 40, height = 5, font = 'arial')
        stats_bt.place(x = 800, y = 310)
    
        div_com_bt = Button(accueil, bg = 'lightblue', text = 'Communications diverses', width = 40, height = 5, font = 'arial')
        div_com_bt.place(x = 600, y = 490)
        
        quitter = Button(accueil, bg = 'lightblue', fg = 'red', text = 'QUITTER', command = accueil.destroy, width = 40, height = 3, font = 'arial', relief = SUNKEN)
        quitter.place(x = 1200, y = 700)
    
        accueil.mainloop()
        
    
        
    accueil_fen ()
    




    Le problème se situe dans la fonction ouvrages_fen
    En effet, lorsque je clique sur le bouton nouveau, je fais appel à la fonction ouvrages_new
    La fonction s'effectue donc à merveille. Mais lorsque je clique sur sauver ou annuler, je reviens bien à la fenêtre que je venais de quitter (la fenêtre ouvrages). Mais lorsque je souhaite cliquer à nouveau sur le bouton nouveau, plus rien ne s'effectue :s

    Quelqu'un pourrait-il m'aider svp, c'est urgent

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      3 novembre 2011 à 16:39:15

      Le message qui suit est une réponse automatique.
      Les réponses automatiques nous permettent d'éviter de répéter de nombreuses fois la même chose, et donc de gagner beaucoup de temps.
      Nous sommes néanmoins ouvert à toute question ou remarque, n'hésite pas à me contacter par messagerie privée à ce sujet.


      Merci d'utiliser les balises de code


      Bonjour,

      Les forums du Site du Zér0 disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source.
      Tu as posté un code source sans utiliser cette fonctionnalité. Pourrais-tu éditer ton message afin d'ajouter ces balises ? Pour cela, sélectionne ton code à colorer et utilise le bouton Image utilisateur afin de choisir la coloration adaptée. Veille à bien choisir le langage de programmation afin que la coloration soit pertinente.

      De plus, veille à ce que ton code soit correctement indenté.

      Afin de ne pas surcharger le sujet, ne poste pas ton code coloré dans un nouveau message mais édite le premier (grâce au bouton Image utilisateur).

      Cela aura pour effet de "colorer" ton code et donc d'en faciliter grandement la lecture. Tu auras ainsi beaucoup plus de chances d'avoir des réponses.

      Voici un exemple de code non coloré (mauvais exemple) :
      int main(int argc, char *argv[])
      {
      long choixOperation;

      printf("Choisissez l'operation a effectuer");
      /* etc. */
      }

      Voici maintenant le même code coloré, utilisant la balise "code" (bon exemple) :
      int main(int argc, char *argv[])
      {
          long choixOperation;
      
          printf("Choisissez l'operation a effectuer");
          /* etc. */
      }
      


      C'est plus clair n'est-ce pas ? ;)

      Pour plus d'information à ce sujet, tu peux lire le tutoriel général sur le zCode.

      Merci de ta compréhension. :)
      • Partager sur Facebook
      • Partager sur Twitter
        3 novembre 2011 à 20:10:35

        C'est bon j'ai réussi à résoudre le problème, en faisant ouvrages_new.destroy(), il ne détruisait pas la fenêtre mais la fonction du même nom, j'ai donc remplacé le nom de la fonction et maintenant, cela marche à merveille
        • Partager sur Facebook
        • Partager sur Twitter

        problème avec une commande en 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