IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Enregistrer une image d'un canvas


Sujet :

Tkinter Python

  1. #21
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par bistouille Voir le message
    Dommage, je peux même pas tester car ImageGrab est incompatible avec linux
    Sur Linux, il existe la bibliothèque pyscreenshot qui fait juste çà (en attendant quelle soit intégrée à Pillow un jour).

    Citation Envoyé par bistouille Voir le message
    Outre le défi de mettre en oeuvre un script utilisant PIL qui est certes plus instructif que d'appeler une bête commande système, ce serait pas plus simple de faire de même avec windows en appelant une commande externe ?
    Certes mais ce n'est ni le sujet ni le bon forum.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  2. #22
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    J'ai essayé de chercher sur des tutos ce qu'environnement système signifie précisément, et à moins d'avoir mal compris, je crois que le mien est "pyzo", version 4.4.2. Cependant, j'ai remarqué qu'en allant dans l'onglet "help" de pyzo, la version de Python indiqué est 3.4.5, alors que dans le terminal avec lequel j'exécute les lignes de code, il y a écrit Python 3.6.3.
    Pour savoir comment je lance la console, j'ouvre juste le fichier python.exe, je tape chaque ligne et je fais "entrée" à chaque fois.
    J'ai essayé C.update() et cela répond correctement, sauf qu'après avoir exécuté la commande C.update(), la fenêtre s'affiche, avec le canvas bleu, et même si je peux continuer à écrire et à compiler des lignes de code, lorsque j'essaye de fermer la fenêtre graphique, cette dernière ne répond pas, et ne se ferme qu'en arrêtant python.exe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Python 3.6.3 |Anaconda, Inc.| (default, Nov  8 2017, 15:10:56) [MSC v.1900 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from tkinter import *
    >>> F = Tk()
    >>> C = Canvas(F, width = 500, height = 500, bg = 'blue')
    >>> C.pack()
    >>> C.update()
    >>> C.winfo_width()
    504

  3. #23
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Agent322 Voir le message
    J'ai essayé C.update() et cela répond correctement, sauf qu'après avoir exécuté la commande C.update(), la fenêtre s'affiche, avec le canvas bleu, et même si je peux continuer à écrire et à compiler des lignes de code, lorsque j'essaye de fermer la fenêtre graphique, cette dernière ne répond pas, et ne se ferme qu'en arrêtant python.exe.
    J'ai la même chose avec Python3.6 (çà ne s'affiche qu'après .update).

    Citation Envoyé par Agent322 Voir le message
    lorsque j'essaye de fermer la fenêtre graphique, cette dernière ne répond pas, et ne se ferme qu'en arrêtant python.exe.
    C'est parce que vous n'avez pas démarré la mainloop: c'est elle qui traite les évènements graphiques.


    Maintenant, que vous voyez comment çà fonctionne, il serait temps de fabriquer un script et d'essayer de sauvegarder des objets crées dans le Canvas avec ImageGrab.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #24
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    J'ai exécuté le script initial en ajoutant .update(), mais cela n'a fonctionné que si, après la commande C.update(), je laisse la fenêtre en avant-plan. Sinon, cela enregistrer une image de la même zone de l'écran, mais avec ce qui est en avant plan, à savoir le terminal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> from tkinter import *
    >>> from PIL import ImageGrab
    >>> F = Tk()
    >>> C = Canvas(F, width = 500, height = 500, bg = 'blue')
    >>> C.pack()
    >>> C.update()
    >>> x = C.winfo_rootx() ; y = C.winfo_rooty() ; w = C.winfo_width() ; h = C.winfo_height()
    >>> ImageGrab.grab((x,y,x+w,y+h)).save("G:\IMAGE.png")
    >>>
    Puis, quand j'exécute le programme correspondant dans Pyzo, cela ne donne pas ce à quoi on s'attend.

    J'ai mis dans l'ordre les images enregistrés : avec le terminal lorsque le canvas est en avant plan dans la zone ; avec le terminal lorsqu'autre chose est en avant plan dans la zone ; et avec pyzo
    Images attachées Images attachées    

  5. #25
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Agent322 Voir le message
    J'ai exécuté le script initial en ajoutant .update(), mais cela n'a fonctionné que si, après la commande C.update(), je laisse la fenêtre en avant-plan. Sinon, cela enregistrer une image de la même zone de l'écran, mais avec ce qui est en avant plan, à savoir le terminal.
    Ca sauvegarde la région de l'écran occupé par le Canvas (et tout ce qu'il y a au dessus) et c'est "normal".
    Maintenant, il va falloir apprendre à écrire un script Python à lancer depuis le terminal avec la commande "python" suivi du nom du fichier dans lequel vous aurez sauvegardé ce qui suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    from tkinter import Canvas, Button, mainloop
    from PIL import ImageGrab
     
    canvas = Canvas(width=500, height=500, bg='blue')
    canvas.pack()
    def save_canvas():
        x, y = canvas.winfo_rootx(), canvas.winfo_rooty()
        w, h = canvas.winfo_width(), canvas.winfo_height()
        print(x, y, w, h)
        ImageGrab.grab((x,y,x+w,y+h)).save("IMAGE.png")
        canvas.quit()
     
    Button(text='register', command=save_canvas).pack()
    mainloop()
    print('done')
    Comme le contenu du Canvas est enregistré lorsqu'on clique sur le Button, il n'y a rien "au dessus". Et comme cela est fait par ce qu'on appelle "callback" pas besoin d'appeler .update: la "mainloop" fait déjà le boulot.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #26
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    J'ai créé un script Python sous le nom script.py
    Mais voilà ce que le terminal m'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> python script.py
      File "<stdin>", line 1
        python script.py
                    ^
    SyntaxError: invalid syntax
    >>>
    J'ai bien vérifié l'orthographe du nom du fichier.
    Après quelques recherches, j'ai cru comprendre que la solution était d'ajouter "python" au PATH . J'ai suivi des indications et ai modifié la liste des valeurs des variables dans PATH en ajoutant C:\python363 (car j'ai python 3.6.3) . Mais ça n'a rien changé.

  7. #27
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Agent322 Voir le message
    J'ai créé un script Python sous le nom script.py
    Mais voilà ce que le terminal m'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> python script.py
      File "<stdin>", line 1
        python script.py
                    ^
    SyntaxError: invalid syntax
    >>>
    Oui mais cela n'est pas "le" terminal mais l'interpréteur Python qui ne comprend que des instruction du langage Python mais qui ne sait pas lancer un programme...
    Sous Windows, ouvrir "un terminal" c'est par exemple taper <Win>R, cmd.exe dans la boîte de dialogue,...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #28
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    Dans la fenêtre qui s'ouvre quand j'exécute cmd.exe, et qui s'intitule "invite de commande", j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Microsoft Windows [version 10.0.16299.192]
    (c) 2017 Microsoft Corporation. Tous droits réservés.
     
    C:\Users\Thevi>python363 script.py
    'python363' n’est pas reconnu en tant que commande interne
    ou externe, un programme exécutable ou un fichier de commandes.
     
    C:\Users\Thevi>python script.py
    'python' n’est pas reconnu en tant que commande interne
    ou externe, un programme exécutable ou un fichier de commandes.

  9. #29
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Si vous installez Python3.6 sur Windows, vous avez un mode d'emploi à lire. Il explique comment modifier le PATH pour que çà trouve l’exécutable et autres informations utiles pour travailler normalement avec Python.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #30
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 13
    Points : 1
    Points
    1
    Par défaut
    J'ai fait ce qu'il y a écrit pour modifier temporairement les variables d'environnement (car je n'ai pas compris les indications pour les modifier définitivement), et cela ne fonctionne toujours pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    C:\Users\Thevi>set PATH=C:\Program Files\Python 3.6;%PATH%
     
    C:\Users\Thevi>set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib
     
    C:\Users\Thevi>python
    'python' n’est pas reconnu en tant que commande interne
    ou externe, un programme exécutable ou un fichier de commandes.

  11. #31
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Agent322 Voir le message
    J'ai fait ce qu'il y a écrit pour modifier temporairement les variables d'environnement (car je n'ai pas compris les indications pour les modifier définitivement), et cela ne fonctionne toujours pas
    Certes mais on ne peut pas savoir dans quel répertoire vous avez installé Python, ni vérifier qu'il existe un fichier python.exe dedans.
    note: dans le mode d'emploi çà parle aussi du "Python launcher" et de la possibilité de taper "py -3.6" (au lieu de "python") pour lancer l'interpréteur.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Enregistrer une image d'un canvas
    Par Maestro64 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 31/01/2014, 08h33
  2. Enregistrer une image à partir d'un canvas
    Par firehist dans le forum Ada
    Réponses: 4
    Dernier message: 18/02/2008, 12h01
  3. [GLScene] Comment enregistrer une image au format TGA
    Par Invité dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 27/05/2005, 15h12
  4. Enregistrer une image
    Par N@sH dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 04/05/2005, 10h07
  5. enregistrer une image et un identifiant
    Par dosach dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 18/03/2004, 17h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo