Partage
  • Partager sur Facebook
  • Partager sur Twitter

barre de progression tkinter

    9 septembre 2020 à 9:31:56

    Bonjour à tous,

    je vais essayer d'être le plus clair possible :-).

    Pour les besoins d'un petit programme, j'aimerai intégrer une barre de progression (qui se rapproche plus d'un veuillez patienter)

    et pouvoir la fermer à mon bon vouloir (pas de bouton OK,STOP etc...)

    Dans l'idée appeler "le veuillez patienter" depuis une classe ou via un thread et le fermer par une commande du type app.quit

    Voici mon code (peut être pas parfait ou mal fait)

    import tkinter as tk
    from tkinter import ttk


    class SampleApp(tk.Tk):
        def __init__(self):
            tk.Tk.__init__(self)
            self.attributes("-topmost", True, "-toolwindow", 1)
            # La commande ci-dessous supprime la title bar
            # root.overrideredirect(1)
            self.title("Veuillez patienter...")
            self.progress = ttk.Progressbar(self, orient="horizontal",
                                            length=200, mode="indeterminate")
            self.progress.pack()
            self.progress.start()
           

    app = SampleApp()

    Merci par avance pour votre aide

    • Partager sur Facebook
    • Partager sur Twitter
      9 septembre 2020 à 10:26:43

      Bonjour,

      import tkinter as tk
      from tkinter import ttk
      
      class SampleApp(tk.Frame):
          def __init__(self,parent=None):
              tk.Frame.__init__(self, parent)
              self.label = tk.Label(self, text= "Veuillez patienter")
              self.label.grid(row = 0, column =0)
              self.progress = ttk.Progressbar(self, orient="horizontal",
                                              length=200, mode="indeterminate")
              self.progress.grid(row=1 , column=0)
              self.progress.start()
          def stop(self):
              self.destroy()
      
      if __name__ == "__main__":
          root = tk.Tk()
          app = SampleApp(root)
          app.grid()
      
          bouton = tk.Button(root, text= "arrêter SampleApp", command= app.stop)
          bouton.grid()
          root.mainloop()
      
      



      • Partager sur Facebook
      • Partager sur Twitter
      • J'aime les bananes, le python, le gnu, le pingouin.
        • Vive le libre !
        14 septembre 2020 à 8:30:01

        Bonjour,

        tout d'abord merci pour ce retour rapide ;-).

        Mais je ne vois pas comment le greffer dans mon code, je me permet donc de poster mon script complet en espérant ne pas trop abuser de votre temps

        #!/usr/bin/env python
        # -*- coding: utf-8 -*-
        
        # https://www.youtube.com/watch?v=ZDR7-iSuwkQ
        # pyinstaller.exe -F -n AutoDiagReport -i ".\Ico\bender.ico" --distpath ".\MyBuildFolder\" --workpath ".\MyBuildFolder\" ".\MyPdfReport.py"
        
        
        import ctypes
        from getmac import get_mac_address
        import ifaddr
        import os
        from PyQt5.QtWidgets import QApplication, QLabel
        from PyQt5.QtCore import Qt, QTimer
        import re
        from reportlab.pdfgen import canvas
        from reportlab.lib import colors
        from reportlab.lib.colors import HexColor
        from reportlab.lib.pagesizes import A4
        import speedtest
        import subprocess
        import sys
        import tempfile, base64, zlib
        import time
        import tkinter
        from tkinter import *
        from tkinter import messagebox
        from tkinter import ttk
        from urllib.error import HTTPError, URLError
        import urllib.request
        import win32gui, win32con
        
        
        # Création de la fenêtre principale
        window = tkinter.Tk()
        window.attributes("-topmost", True)
        window.title("Formulaire")
        # taille souhaite de la fenetre
        w = 300
        h = 120
        # pour centrer la fenetre
        # taille de l'ecran
        ws = window.winfo_screenwidth()
        hs = window.winfo_screenheight()
        # calcul la position de la fenetre
        x = (ws/2) - (w/2)
        y = (hs/2) - (h/2)
        window.geometry('%dx%d+%d+%d' % (w, h, x, y))
        window.resizable(width=False, height=False)
        
        labelOne = ttk.Label(window, text = "Nom et Prénom")
        labelOne.grid(row = 0, column = 0, padx=6, pady=4)
        
        userName = tkinter.StringVar()
        
        userEntryOne = ttk.Entry(window, width = 26, textvariable = userName)
        userEntryOne.grid(row = 0, column = 1)
        # userEntryOne.focus_set()
        # Permet de forcer le focus si celui-ci ne fonctionne pas
        userEntryOne.focus_force()
        
        labelTwo = ttk.Label(window, text = "Adresse")
        labelTwo.grid(row = 1, column = 0, padx=6, pady=4)
        
        userAddress = tkinter.StringVar()
        
        userEntryTwo = ttk.Entry(window, width = 26, textvariable = userAddress)
        userEntryTwo.grid(row = 1, column = 1)
        
        labelTree = ttk.Label(window, text = "Ville et code postal")
        labelTree.grid(row = 2, column = 0, padx=6, pady=4)
        
        userCity = tkinter.StringVar()
        
        userEntryTree = ttk.Entry(window, width = 26, textvariable = userCity)
        userEntryTree.grid(row = 2, column = 1)
        
        def action():
            global myUserName
            global myUserAddress
            global myUserCity
            myUserName = userName.get()
            myUserAddress = userAddress.get()
            myUserCity = userCity.get()
            
            if(not myUserName):
                myUserName = "John Do"
                
            if(not myUserAddress):
                myUserAddress = "Inconnu"
                
            if(not myUserCity):
                myUserCity = "Inconnu"
                
            window.destroy()
            
        
        btn = ttk.Button(window, text = "OK", command = action)
        btn.place(relx=0.5, rely=0.8, anchor='center')
        
        window.mainloop()
        
        # Definition des variable
        whereAmI = os.path.dirname(os.path.realpath(__file__))
        now = time.localtime(time.time())
        
        googleURL = 'https://www.google.fr/'
        fileNameDate = str((time.strftime("%d-%m-%Y_%Hh%M", now)))
        fileName = "AutoDiag_" + fileNameDate + ".pdf"
        fileNameVPN = "AutoDiag_" + fileNameDate + "_avec_VPN.pdf"
        documentTitle = 'Mon premier fichier pdf'
        title = 'AUTO DIAGNOSTIC'
        subTitle = 'Rapport de connexion internet:'
        
        textLines: list
        textLines = [
        "Ce rapport est destiné à estimer le débit de l'accès internet.",
        "Il permet de déterminer si, à un instant donné, les conditions de connexions internet sont compatibles",
        "avec le travail à distance.",
        ]
        
        image1 = 'Img\\speedtest_result.png'
        image2 = 'Img\\2009-Gabarit-basdepage-charte-base.jpg'
        
        # Suppression precedent screen SpeedTest
        if os.path.exists(image1):
            os.remove(image1)
            
        
        # SpeedTest
        urlList: list
        urlList = []
        
        def test():
            s = speedtest.Speedtest()
            s.get_servers()
            s.get_best_server()
            s.download()
            s.upload()
            res = s.results.dict()
            url = s.results.share()
            return (res["download"], res["upload"], res["ping"], url)
            
        
        def main():
            try:
                d, u, p, url = test()
                urllib.request.urlretrieve(url, image1)
            except:
                pass
                
        
        def connect(url):
            try:
                urllib.request.urlopen(url, timeout=3) #Python 3.x
                # print('connected: '+url+' est joignable')
                urlList.append(url+' est joignable')
                if 'extranet' in url:
                    if __name__ == '__main__':
                        main()
                        
                # return True
            except HTTPError as e:
                # print("Le serveur n'a pas pu répondre à la demande.")
                urlList.append("Le serveur n'a pas pu répondre à la demande.")
                # print('Code Erreur: ', e.code)
                urlList.append('Raison: ', e.code)
                # return False
            except URLError as e:
                # print('no internet?: '+url+' est injoignable')
                urlList.append('no internet?: '+url+' est injoignable')
                # print('Raison: ', e.reason)
                # return False
                
        
        connect(googleURL)
        
        # Creation du fichier
        pdf = canvas.Canvas(fileName, pagesize=A4)
        pdf.setTitle(documentTitle)
        
        # Title
        # for font in pdf.getAvailableFonts():
            # print(font)
            
        # Vert PANTONE 382 C
        pdf.setFillColor(HexColor('#C4D600'))
        pdf.setFont("Courier-Bold", 20)
        pdf.drawCentredString(284, 800, title)
        
        # Sub Title
        # Gris PANTONE 432 C
        pdf.setFillColor(HexColor('#333F48'))
        pdf.setFont("Courier-Bold", 12)
        pdf.drawString(20, 750, subTitle)
        
        # Dessiner une ligne
        pdf.setStrokeColor(HexColor('#333F48'))
        pdf.line(20, 744, 240, 744)
        
        # Text
        text = pdf.beginText(20, 720)
        text.setFillColor(HexColor('#333F48'))
        text.setFont("Helvetica-Bold", 10)
        
        for line in textLines:
            text.textLine(line)
            
        pdf.drawText(text)
        
        # Image1
        if os.path.exists(image1):
            pdf.drawImage(image1, 40, 520, width=210, height=120, mask=None, preserveAspectRatio=True)
            
        
        # Network Interfaces
        adaptersList: list
        adaptersList = []
        
        adapters = ifaddr.get_adapters()
        
        for adapter in adapters:
            if not any(re.findall(r'Bluetooth|Loopback|Tunneling', adapter.nice_name, re.IGNORECASE)):
                # print("Network adapter " + adapter.nice_name)
                adaptersList.append(adapter.nice_name)
                if adapter.ips:
                    for ip in adapter.ips:
                        if ip.is_IPv4:
                            # print("   %s/%s" % (ip.ip, ip.network_prefix))
                            adaptersList.append("   IP: %s/%s" % (ip.ip, ip.network_prefix))
                            ip_mac = get_mac_address(ip=ip.ip)
                            # print("   MAC: " + str(ip_mac))
                            adaptersList.append("   MAC: " + str(ip_mac))
                            adaptersList.append('')
                else:
                    print("  No IPs configured")
                    
        
        # Text2
        # Gris PANTONE 432 C
        pdf.setFillColor(HexColor('#333F48'))
        pdf.setFont("Helvetica-Bold", 10)
        pdf.drawString(300, 660, "LISTE DES CARTES RESEAUX:")
        
        # Dessiner une ligne
        # Gris PANTONE 432 C
        pdf.setFillColor(HexColor('#333F48'))
        pdf.line(300, 654, 456, 654)
        
        # Orange PANTONE 144 C 
        pdf.setFillColor(HexColor('#ED8B00'))
        text = pdf.beginText(310, 634)
        text.setFont("Helvetica-Bold", 8)
        
        for line in adaptersList:
            text.textLine(line)
            
        
        pdf.drawText(text)
        
        # Text 3
        # Gris PANTONE 432 C
        pdf.setFillColor(HexColor('#333F48'))
        pdf.setFont("Helvetica-Bold", 10)
        pdf.drawString(20, 286, "URLs TESTÉES:")
        
        # Dessiner une ligne
        # Gris PANTONE 432 C
        pdf.setFillColor(HexColor('#333F48'))
        pdf.line(20, 280, 104, 280)
        
        # Rouge PANTONE 1807 C 
        pdf.setFillColor(HexColor('#A4343A'))
        text = pdf.beginText(30, 260)
        text.setFont("Helvetica-Bold", 10)
        
        for line in urlList:
            text.textLine(line)
            
        
        pdf.drawText(text)
        
        # Text4
        # Gris PANTONE 432 C
        pdf.setFillColor(HexColor('#333F48'))
        pdf.setFont("Courier-Bold", 10)
        pdf.drawString(340, 190, "Réalisé le: " + time.strftime("%d/%m/%Y à %H:%M", now))
        pdf.drawString(340, 180, "Par: " + myUserName)
        pdf.drawString(340, 170, "Au: " + myUserAddress)
        pdf.drawString(340, 160, "    " + myUserCity)
        
        # Image2
        pdf.drawInlineImage(image2, 0, 0)
        
        pdf.save()
        
        if os.path.exists(fileName):
            # Création de la massagebox Rapport genere
            infoFinRapport =  tkinter.Tk()
            infoFinRapport.attributes("-topmost", True)
            infoFinRapport.withdraw()
            messagebox.showinfo("Rapport terminé", "Le rapport " + fileName + " a été généré\n\nVous le trouverez à la racine du programme")
            infoFinRapport.destroy()
        else:
            # Création de la massagebox Rapport genere
            attentionFinRapport =  tkinter.Tk()
            attentionFinRapport.attributes("-topmost", True)
            attentionFinRapport.withdraw()
            messagebox.showwarning("ERREUR durant l'éxcution !!!", "Le rapport n'a pas été généré\n\nVeuillez essayer à nouveau")
            attentionFinRapport.destroy()
            
        

        Cordialement,

        Romain

        • Partager sur Facebook
        • Partager sur Twitter
          22 septembre 2020 à 15:15:34

          Bonjour Romain,

          import tkinter as tk
          from tkinter import ttk
           
          class SampleApp(tk.Frame):
              def __init__(self,parent=None,**arg):
                  tk.Frame.__init__(self, parent,**arg)
                  self.label = tk.Label(self, text= "Veuillez patienter")
                  self.label.grid(row = 0, column =0)
                  self.progress = ttk.Progressbar(self, orient="horizontal",
                                                  length=200, mode="indeterminate")
                  self.progress.grid(row=1 , column=0)
                  self.progress.start()
              def stop(self):
                  self.destroy()
           
          if __name__ == "__main__":
              root = tk.Tk()
              app = SampleApp(root, bg='blue')
              app.grid()
           
              bouton = tk.Button(root, text= "arrêter SampleApp", command= app.stop)
              bouton.grid()
              root.mainloop()

           La classe SampleApp s'utilise exactement de la même manière que le widget frame (avec les même arguments) et se place avec le gestionnaire de tkinter (pack(), grid() ..)

          -
          Edité par __fabien 22 septembre 2020 à 15:21:00

          • Partager sur Facebook
          • Partager sur Twitter
          • J'aime les bananes, le python, le gnu, le pingouin.
            • Vive le libre !

          barre de progression 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