Partage
  • Partager sur Facebook
  • Partager sur Twitter

Capture partielle de la fenêtre Tkinter

    12 janvier 2018 à 18:10:42

    Bonjour, j'aimerais savoir comment faire une capture d'écran mais seulement d'une partie (j'aimerais pouvoir choisir la taille et la position de celle-ci) pour ensuite l'afficher sur cette même fenetre, comment puis-je faire ? Sachant qu'il faudrait que le fichier soit transportable!

    Merci d'avance pour votre aide

    • Partager sur Facebook
    • Partager sur Twitter
      12 janvier 2018 à 21:15:43

      Tente avec PIL ou Pillow dependant de ta version de python et avec la fonction imageGrab. Ensuite tu affiches juste l'image sauvegardée en png dans un canvas dans ta fenetre.

      Bonne Chance.

      • Partager sur Facebook
      • Partager sur Twitter
      Salut c'est moi the geoffrey.
        13 janvier 2018 à 11:08:54

        Merci pour ta réponse, j'ai essayé mais je n'y parviens toujours pas... Ca me met "NameError: name 'ImageGrab' is not defined"

        Voila ce que j'ai fait:

        import PIL.ImageGrab
        
        from tkinter import*
        
        fenetre=Tk()
        
        
        
        
        
        def bouton():
        
            img = ImageGrab.grab()
        
            img.save("screenImage1.png")
        
            photo = PhotoImage(file="screenImage1.png")
        
        
        
            canvas = Canvas(fenetre,width=350, height=200)
        
            canvas.create_image(0, 0, anchor=NW, image=photo)
        
            canvas.pack()
        
        
        
        bouton=Button(fenetre, text="image", command=bouton)
        
        bouton.pack()
        
        fenetre.mainloop()



        • Partager sur Facebook
        • Partager sur Twitter
          13 janvier 2018 à 14:42:37

          Deja tu prends la fenetre entiere.

          En plus c'est :

          from PIL import ImageGrab
          from
          tkinter import*
          fenetre=Tk()

          Cela vient du fait que le module PIL est un fichier et ImageGrab est un fichier.

          Change les coordonnées dans ImageGrab mais la aussi

          def bouton():
           
              img = grab(x,y,x1,y1)
           
              img.save("screenImage1.png")
           
              photo = PhotoImage(file="screenImage1.png")
           
           
           
              canvas = Canvas(fenetre,width=350, height=200)
           
              canvas.create_image(0, 0, anchor=NW, image=photo)
           
              canvas.pack()
           
           
           
          bouton=Button(fenetre, text="image", command=bouton)
           
          bouton.pack()
           
          fenetre.mainloop()

          Je pense que cela devrait marcher. Quel est en fait le programme pour lequel tu en as besoin?



          • Partager sur Facebook
          • Partager sur Twitter
          Salut c'est moi the geoffrey.
            13 janvier 2018 à 16:30:50

            Merci mais je n'arrive toujours pas à y faire marcher... j'ai mis :

            from PIL import ImageGrab
            from tkinter import*
            fenetre=Tk()
            def bouton():
                img = ImageGrab.grab()
                img = grab(10,10,10,10)
            
                img.save("screenImage1.png")
            
                photo = PhotoImage(file="screenImage1.png")
            
            
            
                canvas = Canvas(fenetre,width=350, height=200)
            
                canvas.create_image(0, 0, anchor=NW, image=photo)
            
                canvas.pack()
            
            
            
            bouton=Button(fenetre, text="image", command=bouton)
            
            bouton.pack()
            
            fenetre.mainloop()

            Et il me renvoie "NameError: name 'Grab' is not defined" 

            Au passage, je n'ai pas bien compris ce que je dois mettre à la place de "x,y,x1,y1" du coup là je n'ai mis que des 10...

            Et c'est trop compliqué à expliquer comme ça mais juste pour créer un début de jeu j'aimerai faire une capture d'écran d'une partie de la fenêtre ;)

            • Partager sur Facebook
            • Partager sur Twitter
              13 janvier 2018 à 17:12:56

              Enleve deja

              img = ImageGrab.grab()

              • Partager sur Facebook
              • Partager sur Twitter
              Salut c'est moi the geoffrey.
                13 janvier 2018 à 17:32:51

                Je l'ai fait et ça ne change rien...:(
                • Partager sur Facebook
                • Partager sur Twitter
                  14 janvier 2018 à 10:06:14

                  Salut,

                  Il faut comprendre ce que vous faites. C'est pourtant simple. C'est la base de python !!!!

                  Si vous importez le module ImageGrab de PIL, il faut l'utiliser.....

                  La fonction grab() n'existe pas, puisqu'il vient avec ImageGrab.grab() ...

                  from PIL import ImageGrab
                  from tkinter import*
                  
                  fenetre=Tk()
                  
                  def bouton():
                      img = ImageGrab.grab(10,10,10,10)
                   
                      img.save("screenImage1.png")
                      ....

                  PS: Essayez de comprendre la base de python, avant d'utiliser les modules externes.. Si vous ne faites que copier/coller du code, vous allez jamais comprendre.

                  Bonne chance

                  A+

                  -
                  Edité par nolimitech 14 janvier 2018 à 10:06:35

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 janvier 2018 à 11:56:51

                    Merci beaucoup nolimitech mais malheureusement cela ne marche toujours pas... quand j'appuie sur le bouton, la capture se fait bien mais elle ne s'affiche pas dans mon canvas ensuite... :(

                    from PIL import ImageGrab
                    from tkinter import*
                    
                    fenetre=Tk()
                    
                    def bouton():
                        img = ImageGrab.grab(x,y,x1,y1)
                    
                        img.save("screenImage1.png")
                        photo = PhotoImage(file="screenImage1.png")
                    
                    
                    
                        canvas = Canvas(fenetre,width=350, height=200)
                    
                        canvas.create_image(0, 0, anchor=NW, image=photo)
                    
                        canvas.pack()
                    
                    bouton=Button(fenetre, text="image", command=bouton)
                    
                    bouton.pack()
                    fenetre.mainloop()

                    Et je n'ai toujours pas compris ce que je dois mettre à la place de "x,y,x1,y1" et d'ailleurs si je les laisse ou meme si je les remplace par des nombres, cela me fait une erreur :(

                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 janvier 2018 à 17:59:05

                      Aidez moi s'il vous plait je n'y arrive pas !
                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 janvier 2018 à 22:37:21

                        Etudie ceci:

                        from PIL import ImageGrab, ImageTk
                        import tkinter as tk
                         
                         
                        def capture():
                            """Capture un région de l'écran et l'affiche dans le canvas.
                        
                            On efface tous les éléments du canvas avant d'afficher l'image.
                            """
                            img = ImageGrab.grab((100, 150, 450, 350))
                            # On récupère l'image grâce à ImageTk.PhotoImage que l'on référence
                            # à un attribut du canvas pour ne pas que cette référence disparaisse
                            # lorsqu'on quittera la fonction. Voir la note bas de page 
                            # http://effbot.org/tkinterbook/photoimage.htm
                            canvas.photo = ImageTk.PhotoImage(img)
                            canvas.delete("all")
                            canvas.create_image(0, 0, anchor=tk.NW, image=canvas.photo)
                         
                        
                        fenetre = tk.Tk()
                        bouton = tk.Button(fenetre, text="Capture écran", command=capture)
                        bouton.pack(fill=tk.BOTH, padx=20, pady=5)
                        
                        canvas = tk.Canvas(fenetre, width=350, height=200)
                        canvas.pack()
                        fenetre.mainloop()



                        • Partager sur Facebook
                        • Partager sur Twitter
                          17 janvier 2018 à 13:44:17

                          Merci beaucoup Dan737 tu me sauves la vie !!! J'aurais juste quelques questions pour mieux comprendre:

                          -A quoi correspondent le nombres "100,150,450,350" dans le "ImageGrab.grab" ?

                          -A quoi sert la ligne 15 ?

                          -Pourquoi as tu mis "tk." devant "both" (ligne 22) et devant "NW" (ligne 17) ?

                          En tout cas vraiment merci !

                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 janvier 2018 à 15:55:51

                            Salut,

                            • Pour les nombres dans grab, la documentation parle d'une bbox. C'est généralement l'abréviation de Bounding Box. Ce sont donc les coordonnées de l'écran que tu veux capturer. Ca prend la forme (left, top, right, bottom).
                            • J'ai mis un commentaire juste au-dessus. Donc merci d'aller d'abord lire ce qui se trouve à ce lien. Si tu ne comprends toujours pas, reviens poser une question plus précise.
                            • Regarde la ligne 2 ! J'importe tkinter sous l'alias tk. C'est plus court à taper. Je trouve que c'est plus clair d'utiliser le préfixe tk devant tout ce qui vient du module tk pour 2 raisons:
                              • Ca ne pollue pas l'espace globale avec tout ce que tkinter contient
                              • Je rends explicite toute utilisation des éléments de tkinter
                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 janvier 2018 à 18:05:23

                              D'accord merci, je suis désolé avec toutes mes questions mais je débute alors c'est un peu dure (tu vas certainement dire que dans ce cas je devrais commencer par quelque chose de plus facile mais malheureusement je n'ai pas le choix c'est un travail que j'ai à faire...) 

                              Donc du coup j'ai encore quelques petits soucis :/

                              -Quand je clique sur le bouton pour afficher et faire la capture d'écran, la séléction d'écran que j'ai choisi change à chaque clique, comme si à la place de x1,y1,x2,y2 j'avais mis des valeurs aléatoires ! 

                              -Et donc si j'ai bien compris, si jamais je souhaite enlever le "import tKinter as tk" et mettre à la place "from tkinter import*", il faut d'abord que j'enlève tous les "Tk" mis un peu partout ? 

                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 janvier 2018 à 10:45:34

                                Ne t'excuse pas d'être débutant. C'est normal. Mais il faut que tu te documentes aussi un peu par toi-même. :)

                                Pour la capture d'écran, je ne vois pas pourquoi la sélection change à chaque fois. C'est d'autant plus difficile à déterminer sans un code minimaliste reproduisant le problème. Le code que j'ai fournis plus haut ne souffre pas de ce problème. Tout du moins pas chez moi. Et chez toi ?

                                S'il fonctionne chez toi aussi, tu as une base pour comparer avec ce que tu fais dans ton propre code et tenter de voir d'où vient le problème. Utilise plein de print pour imprimer l'état de tes variables, etc.

                                Pour l'import de module, je te conseil de lire le tuto officiel pour comprendre comment fonctionne l'importation. https://docs.python.org/fr/3/tutorial/modules.html#modules Sans comprendre ce qui se passe, tu vas constamment faire des erreurs.

                                Bonne chance!

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  19 janvier 2018 à 16:05:57

                                  Merci beaucoup pour ton aide !

                                  Finalement, à force de m’acharner j'ai réussi à le faire marcher (sans que la sélection ne bouge) en mettant simplement ma page en plein écran ! 

                                  Je devrais me débrouiller pour la suite alors vraiment merci ! :)

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Capture partielle de la fenêtre 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