Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème Interface Graphique Tkinter

    17 juillet 2019 à 11:07:38

    Bonjour,

    Je vous écris car je rencontre un problème à l'exécution de mes boutons avec tkinter.

    En effet, sauf erreur de syntaxe, lorsque je lance ma fenetre, celle-ci s'ouvre bien avec mes boutons mais quand je clique sur l'un d'entres eux, par exemple le bouton quitter, la fenetre plante et je suis obliger de la fermer en arreter le processus. Je rencontre le même problème lorsque j'essaie d'associer un lancement de fichier .BAT lors du clic d'un bouton.

    Pourriez-vous m'aider ?

    Voici mon code :

    # On importe Tkinter
    from tkinter import ttk
    from tkinter import *
    from PIL import Image, ImageTk
    from PIL import Image, ImageTk
    import subprocess
    import tkinter as tk
    import time
    import threading
    import tkinter.font as tkfont
    
    
    
    # On crée une fenêtre, racine de notre interface
    fenetre = Tk()
    
    #=========CONFIGURATION POLICE================================================
    helvetica40 = tkfont.Font(family='Helvetica', size=40, weight='bold')
    helvetica20 = tkfont.Font(family='Helvetica', size=20, weight='bold')
    #button = tk.Button(fenetre, text='Size : 50', font=helvetica)
    #button.grid(row=0,column=0, sticky='EWNS')
    #=========CONFIGURATION SYSTEME DE CARTOGRAPHIE===============================
    fenetre.grid_columnconfigure(0,weight=1)
    fenetre.grid_rowconfigure(0,weight=1)
    #==========ENTREE=============================================================
    
    champ_label = Label(fenetre, text="Analyse",font=helvetica40)
    champ_label.pack()
    #champ_label.grid(row=1)
    champ_labe2 = Label(fenetre, text='Bonjour, que souhaitez-vous faire ?')
    champ_labe2.pack()
    #champ_labe2.grid(row =2)
    champ_labe3 = Label(fenetre, text='Effectuer tous les tests')
    champ_labe3.pack()
    #champ_labe3.grid(row =3)
    champ_labe4 = Label(fenetre, text='Lancer un test spécifique')
    champ_labe4.pack()
    #champ_labe4.grid(row =4)
    
    #==========LANCEMENT DES BATCH================================================
    
    def start_batch_ALL():
           subprocess.call([r'C:\Users\MQUERCIA\Desktop\Sequence_Professionnelle_4\Interface_graphique_python\Matrix.bat'])
               
    
    #==============CREATION DES BOUTONS===========================================
    
    #champ_label = Label(fenetre, text="Analyse Automatique pour Acceptation des Munitions")
    #champ_label = Label(fenetre, text="Bonjour, que souhaitez-vous faire ?")
    bouton_analyseTout = Button(fenetre, text="Analyser tous les essais", command=start_batch_ALL)
    
    #==================POSITIONNEMENT=============================================
    #champ_labe3 = Labe3(fenetre, text="Bonjour, que souhaitez-vous faire ?")
    bouton_analyseTout.pack(side =RIGHT, padx =3, pady =5)
    bouton_analyseSpecif1.pack(side =RIGHT, padx =3, pady =5)
    bouton_analyseSpecif2.pack(side =RIGHT, padx =3, pady =5)
    bouton_analyseSpecif3.pack(side =RIGHT, padx =3, pady =5)
    bouton_analyseSpecif4.pack(side =RIGHT, padx =3, pady =5)
    bouton_analyseSpecif5.pack(side =RIGHT, padx =3, pady =5)
    bouton_analyseSpecif6.pack(side =RIGHT, padx =3, pady =5)
    bouton_analyseSpecif7.pack(side =RIGHT, padx =3, pady =5)
    bouton_analyseSpecif8.pack(side =RIGHT, padx =3, pady =5)
    bouton_analyseSpecif9.pack(side =RIGHT, padx =3, pady =5)
    bouton_analyseSpecif10.pack(side =RIGHT, padx =3, pady =5)
    bouton_analyseSpecif11.pack(side =RIGHT, padx =3, pady =5)
    
    #====================BARRE DE PROGRESSION=====================================
    
    pb = ttk.Progressbar(fenetre, orient="horizontal", length=200, mode="determinate")
    pb.pack()
    pb.start()
    
    #fenetre.mainloop()
    
    #==================LISTE CHEMINS==============================================
    liste = Listbox(fenetre)
    
    liste.pack()
    liste.insert(END, "Test")
    
    liste.insert(END, "All")
    
    liste.insert(END, "Select")
    
    #==================IMAGE======================================================
    """img = tkinter.PhotoImage(file='index.png', master=fenetre)
    lab = tkinter.Label(fenetre, image=img)
    lab.pack()"""
    
    img =PhotoImage(file='index.png', master=fenetre)
    lab = tkinter.Label(fenetre, image=img)
    lab.pack()
    #==================BOUTON QUIT===============================================
    bouton_quit = Button(fenetre, text="Quitter", command=fenetre.quit)
    bouton_quit.pack(side =RIGHT,padx =3, pady =5)
    #==================DATE=======================================================
    
    def affichetemps():
        global L
        while True:
            date = time.strftime('%d/%m/%y %H:%M:%S',time.localtime())
            L.config(text=date)
            time.sleep(0.01)   
     
    #root = Tk()
    L = Label(fenetre, text = "")
    L.pack()
    T=threading.Thread(target=affichetemps)
    T.setDaemon(True)
    T.start()
    
    fenetre.mainloop()



    -
    Edité par MatthieuQuercia 17 juillet 2019 à 12:27:17

    • Partager sur Facebook
    • Partager sur Twitter
      17 juillet 2019 à 12:00:46

      Utilise le bouton </> pour mettre ton code.

      Sinon le problème viens probablement du fait que tu ne stoppe pas le thread avant de quitter ?

      -
      Edité par thelinekioubeur 17 juillet 2019 à 12:03:15

      • Partager sur Facebook
      • Partager sur Twitter
        17 juillet 2019 à 12:28:13

        Merci pour la réponse. Tu parles du thread ligne 108 ? je ne pense pas car si je fais un code minimaliste avec juste 1 bouton le problème reste entier
        • Partager sur Facebook
        • Partager sur Twitter
          17 juillet 2019 à 13:51:22

          Peux-tu donner ton code minimaliste ? Car celui là n'est pas testable, il y a des variables non déclarées et puis on n'a pas les images.
          • Partager sur Facebook
          • Partager sur Twitter
            17 juillet 2019 à 14:07:22

            Voilà le code minimaliste :

            from tkinter import *
            
            
            
            # On crée une fenêtre, racine de notre interface
            fenetre = Tk()
            
            
            #==================BOUTON QUIT===============================================
            bouton_quit = Button(fenetre, text="Quitter", command=fenetre.quit)
            bouton_quit.pack(side =RIGHT,padx =3, pady =5)
            #==================DATE=======================================================
            
            
            
            fenetre.mainloop()


            quand je clique sur "quitter", le bouton reste enfoncé et la fenetre tk crash ...

            -
            Edité par MatthieuQuercia 17 juillet 2019 à 14:08:23

            • Partager sur Facebook
            • Partager sur Twitter
              17 juillet 2019 à 14:36:37

              Ah oui ...

              Tu es sur quel OS ?

              Quelles version de python et de tkinter ?

              Tu peux le savoir en tapant ceci :

              python --version
              python -c "import tkinter; print(tkinter.TkVersion)"



              • Partager sur Facebook
              • Partager sur Twitter
                17 juillet 2019 à 15:05:14

                j'utilise la version 3.7 de python, quant à la version de tkinter j'utilise celle qui était livrée de base lors du téléchargement de Python.

                Quand je rentre tes lignes dans ma console python il me dit invalid syntax

                • Partager sur Facebook
                • Partager sur Twitter
                  17 juillet 2019 à 15:07:20

                  Ce sont des lignes à écrire dans la console, pas dans l'interpréteur python

                  Tu n'as pas répondu mais je suppose que tu es sur windows ?

                  -
                  Edité par thelinekioubeur 17 juillet 2019 à 15:08:12

                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 juillet 2019 à 15:20:13

                    ok je vais tester, effectivement je suis sur windows :

                    pour python c'est la version 3.7.0

                    et pour tkinter c'est la version 8.6

                    En fait j'ai aussi le message d'erreur : "le noyau est mort. Redémarrage en cours"...

                    -
                    Edité par MatthieuQuercia 18 juillet 2019 à 15:09:02

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Problème Interface Graphique Tkinter

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    • Editeur
                    • Markdown