Sur Linux, il existe la bibliothèque pyscreenshot qui fait juste çà (en attendant quelle soit intégrée à Pillow un jour).
Certes mais ce n'est ni le sujet ni le bon forum.
- W
Version imprimable
Sur Linux, il existe la bibliothèque pyscreenshot qui fait juste çà (en attendant quelle soit intégrée à Pillow un jour).
Certes mais ce n'est ni le sujet ni le bon forum.
- W
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:
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
J'ai la même chose avec Python3.6 (çà ne s'affiche qu'après .update).
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
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.
Puis, quand j'exécute le programme correspondant dans Pyzo, cela ne donne pas ce à quoi on s'attend.Code:
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") >>>
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
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:
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.Code:
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')
- W
J'ai créé un script Python sous le nom script.py
Mais voilà ce que le terminal m'affiche :
J'ai bien vérifié l'orthographe du nom du fichier.Code:
1
2
3
4
5
6 >>> python script.py File "<stdin>", line 1 python script.py ^ SyntaxError: invalid syntax >>>
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é.
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
Dans la fenêtre qui s'ouvre quand j'exécute cmd.exe, et qui s'intitule "invite de commande", j'obtiens :
Code:
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' nest 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' nest pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.
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
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:
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' nest pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.
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