c'est mon premier post sur ce forum, et je suis plutôt jeune en Python, et
assez vieux en programmation ;-). Je dois avouer que ce langage me plait
beaucoup, par sa concision, sa clarté et surtout son élégance (J'avoue
cependant que si Python était le premier langage à reprendre l'idée de mon
ami Canarlake, ce ne serait pour me déplaire :
http://canarlake.org/index.cgi?theme=liberezexpressions )
Venons en à mon problème :
J'ai créé un bitmap avec Image.new, que je manipule avec des getpixel /
putpixel. Pour l'afficher à l'écran, je crée un ImageTk.PhotoImage, que que
je place ensuite dans un create_image d'un Canvas (TkInter).
Ma question est : comment rafraîchir l'écran à chaque fois que je fais des
opération dans le bitmap. Je pensais que c'était une liaison dynamique, pas
du tout. J'ai cherché dans Google, je n'ai rien trouvé de probant.
J'en suis donc réduit à détruire le create_image par un Canvas.delete, puis
à le recréer ! C'est pas optimum et je pense qu'il y a moyen de faire mieux
et plus simple (j'ai cherché un méthode de type CopyPixels, redraw, BitBlt,
etc... sans succès).
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jerome
al wrote:
Bonjour à tous,
Bonjour
c'est mon premier post sur ce forum, et je suis plutôt jeune en Python, et assez vieux en programmation ;-). Je dois avouer que ce langage me plait beaucoup, par sa concision, sa clarté et surtout son élégance (J'avoue cependant que si Python était le premier langage à reprendre l'idée de mon ami Canarlake, ce ne serait pour me déplaire : http://canarlake.org/index.cgi?theme=liberezexpressions )
Je ne suis pas complètement convaincu par la démonstration de ton ami, c'est à mon sens plus une solution pratique pour détourner la philosophie objet du langage avec une syntaxe fonctionnelle.
Qu'est-ce qui empêche d'écrire nab = (a-b).norme() plutôt que de se forcer à rajouter une syntaxe comme nab = (b-a).(sqrt(self.x**2 + self.y**2 + self.z**2)) ? La création d'une classe implique nécessairement une volonté de factorisation du code et du comportement d'un objet.
Venons en à mon problème : J'ai créé un bitmap avec Image.new, que je manipule avec des getpixel / putpixel. Pour l'afficher à l'écran, je crée un ImageTk.PhotoImage, que que je place ensuite dans un create_image d'un Canvas (TkInter).
Ma question est : comment rafraîchir l'écran à chaque fois que je fais des opération dans le bitmap. Je pensais que c'était une liaison dynamique, pas du tout. J'ai cherché dans Google, je n'ai rien trouvé de probant.
J'en suis donc réduit à détruire le create_image par un Canvas.delete, puis à le recréer ! C'est pas optimum et je pense qu'il y a moyen de faire mieux et plus simple (j'ai cherché un méthode de type CopyPixels, redraw, BitBlt, etc... sans succès).
Ce sont des fonctions qui sont disponibles avec wxPython que je trouve personnellement plus performante et plus puissante que TkInter. Pour ton problème, as-tu essayé de dessiner avec l'équivalent du putpixel pour les canvas TkInter lorsque tu modifies ton image ?
Merci de vos lumières.
al wrote:
Bonjour à tous,
Bonjour
c'est mon premier post sur ce forum, et je suis plutôt jeune en Python, et
assez vieux en programmation ;-). Je dois avouer que ce langage me plait
beaucoup, par sa concision, sa clarté et surtout son élégance (J'avoue
cependant que si Python était le premier langage à reprendre l'idée de mon
ami Canarlake, ce ne serait pour me déplaire :
http://canarlake.org/index.cgi?theme=liberezexpressions )
Je ne suis pas complètement convaincu par la démonstration de ton ami,
c'est à mon sens plus une solution pratique pour détourner la
philosophie objet du langage avec une syntaxe fonctionnelle.
Qu'est-ce qui empêche d'écrire nab = (a-b).norme() plutôt que de se
forcer à rajouter une syntaxe comme nab = (b-a).(sqrt(self.x**2 +
self.y**2 + self.z**2)) ? La création d'une classe implique
nécessairement une volonté de factorisation du code et du comportement
d'un objet.
Venons en à mon problème :
J'ai créé un bitmap avec Image.new, que je manipule avec des getpixel /
putpixel. Pour l'afficher à l'écran, je crée un ImageTk.PhotoImage, que que
je place ensuite dans un create_image d'un Canvas (TkInter).
Ma question est : comment rafraîchir l'écran à chaque fois que je fais des
opération dans le bitmap. Je pensais que c'était une liaison dynamique, pas
du tout. J'ai cherché dans Google, je n'ai rien trouvé de probant.
J'en suis donc réduit à détruire le create_image par un Canvas.delete, puis
à le recréer ! C'est pas optimum et je pense qu'il y a moyen de faire mieux
et plus simple (j'ai cherché un méthode de type CopyPixels, redraw, BitBlt,
etc... sans succès).
Ce sont des fonctions qui sont disponibles avec wxPython que je trouve
personnellement plus performante et plus puissante que TkInter. Pour ton
problème, as-tu essayé de dessiner avec l'équivalent du putpixel pour
les canvas TkInter lorsque tu modifies ton image ?
c'est mon premier post sur ce forum, et je suis plutôt jeune en Python, et assez vieux en programmation ;-). Je dois avouer que ce langage me plait beaucoup, par sa concision, sa clarté et surtout son élégance (J'avoue cependant que si Python était le premier langage à reprendre l'idée de mon ami Canarlake, ce ne serait pour me déplaire : http://canarlake.org/index.cgi?theme=liberezexpressions )
Je ne suis pas complètement convaincu par la démonstration de ton ami, c'est à mon sens plus une solution pratique pour détourner la philosophie objet du langage avec une syntaxe fonctionnelle.
Qu'est-ce qui empêche d'écrire nab = (a-b).norme() plutôt que de se forcer à rajouter une syntaxe comme nab = (b-a).(sqrt(self.x**2 + self.y**2 + self.z**2)) ? La création d'une classe implique nécessairement une volonté de factorisation du code et du comportement d'un objet.
Venons en à mon problème : J'ai créé un bitmap avec Image.new, que je manipule avec des getpixel / putpixel. Pour l'afficher à l'écran, je crée un ImageTk.PhotoImage, que que je place ensuite dans un create_image d'un Canvas (TkInter).
Ma question est : comment rafraîchir l'écran à chaque fois que je fais des opération dans le bitmap. Je pensais que c'était une liaison dynamique, pas du tout. J'ai cherché dans Google, je n'ai rien trouvé de probant.
J'en suis donc réduit à détruire le create_image par un Canvas.delete, puis à le recréer ! C'est pas optimum et je pense qu'il y a moyen de faire mieux et plus simple (j'ai cherché un méthode de type CopyPixels, redraw, BitBlt, etc... sans succès).
Ce sont des fonctions qui sont disponibles avec wxPython que je trouve personnellement plus performante et plus puissante que TkInter. Pour ton problème, as-tu essayé de dessiner avec l'équivalent du putpixel pour les canvas TkInter lorsque tu modifies ton image ?
Merci de vos lumières.
al
Ce sont des fonctions qui sont disponibles avec wxPython que je trouve personnellement plus performante et plus puissante que TkInter. Pour ton problème, as-tu essayé de dessiner avec l'équivalent du putpixel pour les canvas TkInter lorsque tu modifies ton image ?
Pour l'instant je suis en phase d'apprentissage, petit bout par petit bout ! L'aspect Tk étant relativement laid (du moins sous Linux), je compte bien passer plus tard à wxPython, Qt ou GTK !!!
Pour dessiner directement sur un canvas le seul équivalent que je voie est create_rectangle, mais c'est beaucoup plus lent (et il me manque le getpixel), car ça crée un objet à chaque fois, alors que là je veux juste faire de la manipulation brute de pixels. Pensait tu à une autre méthode de canvas que je n'aurai pas vu ?
Ce sont des fonctions qui sont disponibles avec wxPython que je trouve
personnellement plus performante et plus puissante que TkInter. Pour ton
problème, as-tu essayé de dessiner avec l'équivalent du putpixel pour
les canvas TkInter lorsque tu modifies ton image ?
Pour l'instant je suis en phase d'apprentissage, petit bout par petit bout !
L'aspect Tk étant relativement laid (du moins sous Linux), je compte bien
passer plus tard à wxPython, Qt ou GTK !!!
Pour dessiner directement sur un canvas le seul équivalent que je voie est
create_rectangle, mais c'est beaucoup plus lent (et il me manque le
getpixel), car ça crée un objet à chaque fois, alors que là je veux juste
faire de la manipulation brute de pixels. Pensait tu à une autre méthode de
canvas que je n'aurai pas vu ?
Ce sont des fonctions qui sont disponibles avec wxPython que je trouve personnellement plus performante et plus puissante que TkInter. Pour ton problème, as-tu essayé de dessiner avec l'équivalent du putpixel pour les canvas TkInter lorsque tu modifies ton image ?
Pour l'instant je suis en phase d'apprentissage, petit bout par petit bout ! L'aspect Tk étant relativement laid (du moins sous Linux), je compte bien passer plus tard à wxPython, Qt ou GTK !!!
Pour dessiner directement sur un canvas le seul équivalent que je voie est create_rectangle, mais c'est beaucoup plus lent (et il me manque le getpixel), car ça crée un objet à chaque fois, alors que là je veux juste faire de la manipulation brute de pixels. Pensait tu à une autre méthode de canvas que je n'aurai pas vu ?
Jerome
al wrote:
Ce sont des fonctions qui sont disponibles avec wxPython que je trouve personnellement plus performante et plus puissante que TkInter. Pour ton problème, as-tu essayé de dessiner avec l'équivalent du putpixel pour les canvas TkInter lorsque tu modifies ton image ?
Pour l'instant je suis en phase d'apprentissage, petit bout par petit bout ! L'aspect Tk étant relativement laid (du moins sous Linux), je compte bien passer plus tard à wxPython, Qt ou GTK !!!
Tu gagneras du temps à passer directement à une librairie plus évoluée
Pour dessiner directement sur un canvas le seul équivalent que je voie est create_rectangle, mais c'est beaucoup plus lent (et il me manque le getpixel), car ça crée un objet à chaque fois, alors que là je veux juste faire de la manipulation brute de pixels. Pensait tu à une autre méthode de canvas que je n'aurai pas vu ?
Non, je n'ai jamais essayé de pousser TkInter pour voir ses possibilités, je me suis arrêté à l'aspect "interface des années 80" avant de considérer les autres. En lisant la doc j'aurais tenté le create_rectangle aussi. En parcourant rapidement la doc je ne pense pas qu'il existe une autre solution que ce que tu fais actuellement.
al wrote:
Ce sont des fonctions qui sont disponibles avec wxPython que je trouve
personnellement plus performante et plus puissante que TkInter. Pour ton
problème, as-tu essayé de dessiner avec l'équivalent du putpixel pour
les canvas TkInter lorsque tu modifies ton image ?
Pour l'instant je suis en phase d'apprentissage, petit bout par petit bout !
L'aspect Tk étant relativement laid (du moins sous Linux), je compte bien
passer plus tard à wxPython, Qt ou GTK !!!
Tu gagneras du temps à passer directement à une librairie plus évoluée
Pour dessiner directement sur un canvas le seul équivalent que je voie est
create_rectangle, mais c'est beaucoup plus lent (et il me manque le
getpixel), car ça crée un objet à chaque fois, alors que là je veux juste
faire de la manipulation brute de pixels. Pensait tu à une autre méthode de
canvas que je n'aurai pas vu ?
Non, je n'ai jamais essayé de pousser TkInter pour voir ses
possibilités, je me suis arrêté à l'aspect "interface des années 80"
avant de considérer les autres. En lisant la doc j'aurais tenté le
create_rectangle aussi. En parcourant rapidement la doc je ne pense pas
qu'il existe une autre solution que ce que tu fais actuellement.
Ce sont des fonctions qui sont disponibles avec wxPython que je trouve personnellement plus performante et plus puissante que TkInter. Pour ton problème, as-tu essayé de dessiner avec l'équivalent du putpixel pour les canvas TkInter lorsque tu modifies ton image ?
Pour l'instant je suis en phase d'apprentissage, petit bout par petit bout ! L'aspect Tk étant relativement laid (du moins sous Linux), je compte bien passer plus tard à wxPython, Qt ou GTK !!!
Tu gagneras du temps à passer directement à une librairie plus évoluée
Pour dessiner directement sur un canvas le seul équivalent que je voie est create_rectangle, mais c'est beaucoup plus lent (et il me manque le getpixel), car ça crée un objet à chaque fois, alors que là je veux juste faire de la manipulation brute de pixels. Pensait tu à une autre méthode de canvas que je n'aurai pas vu ?
Non, je n'ai jamais essayé de pousser TkInter pour voir ses possibilités, je me suis arrêté à l'aspect "interface des années 80" avant de considérer les autres. En lisant la doc j'aurais tenté le create_rectangle aussi. En parcourant rapidement la doc je ne pense pas qu'il existe une autre solution que ce que tu fais actuellement.
al
Jerome wrote:
Tu gagneras du temps à passer directement à une librairie plus évoluée
Merci du conseil, étant fan de KDE je tenterai Qt
Non, je n'ai jamais essayé de pousser TkInter pour voir ses possibilités, je me suis arrêté à l'aspect "interface des années 80" avant de considérer les autres. En lisant la doc j'aurais tenté le create_rectangle aussi. En parcourant rapidement la doc je ne pense pas qu'il existe une autre solution que ce que tu fais actuellement.
Merci, de toute façon c'est juste ma phase d'apprentissage, si je fais de plus gros projets j'utiliserai d'autres librairies. Concernant le look années 80, ça peut avoir son charme vintage "station de travail sun" avec un thème Motif... ;-)
Jerome wrote:
Tu gagneras du temps à passer directement à une librairie plus évoluée
Merci du conseil, étant fan de KDE je tenterai Qt
Non, je n'ai jamais essayé de pousser TkInter pour voir ses
possibilités, je me suis arrêté à l'aspect "interface des années 80"
avant de considérer les autres. En lisant la doc j'aurais tenté le
create_rectangle aussi. En parcourant rapidement la doc je ne pense pas
qu'il existe une autre solution que ce que tu fais actuellement.
Merci, de toute façon c'est juste ma phase d'apprentissage, si je fais de
plus gros projets j'utiliserai d'autres librairies.
Concernant le look années 80, ça peut avoir son charme vintage "station de
travail sun" avec un thème Motif... ;-)
Tu gagneras du temps à passer directement à une librairie plus évoluée
Merci du conseil, étant fan de KDE je tenterai Qt
Non, je n'ai jamais essayé de pousser TkInter pour voir ses possibilités, je me suis arrêté à l'aspect "interface des années 80" avant de considérer les autres. En lisant la doc j'aurais tenté le create_rectangle aussi. En parcourant rapidement la doc je ne pense pas qu'il existe une autre solution que ce que tu fais actuellement.
Merci, de toute façon c'est juste ma phase d'apprentissage, si je fais de plus gros projets j'utiliserai d'autres librairies. Concernant le look années 80, ça peut avoir son charme vintage "station de travail sun" avec un thème Motif... ;-)
JB BUTET
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Salut :)
(snip)
il faut que ton image soit déclarées en variable globale... ou mieux :
tu fais un dico (qui peut contenir des objets) : dic["image"] = monobjetimage
et ça permet de garder l'image.
Pour la rafraichir après changement, il y a une fonctione update() (je te laisse chercher, ce mot clef est le bon)
A+
JB
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
Pour ton problème, as-tu essayé de dessiner avec l'équivalent du putpixel pour les canvas TkInter lorsque tu modifies ton image ?
Juste pour apporter une précision: il n'y a pas de putpixel sur les Canvas Tkinter, et il n'y a pas de getpixel non plus. Un Canvas Tkinter est un module de dessin *vectoriel*, et pas bitmap. Ceci permet par exemple de faire:
r = monCanvas.create_rectangle(50, 50, 100, 100)
puis plus tard:
monCanvas.coords(r, 40, 30, 80, 150)
La variable r identifie un objet rectangle, que l'on manipule comme un rectangle, et pas comme un ensemble de points. Ce qui n'est pas possible, par contre, c'est de créer un rectangle, puis d'enlever des pixels dedans.
Le Canvas Tkinter est donc très utile pour faire des applis de dessin vectoriel, et très em...bêtant pour faire du bitmap. En d'autres termes, on est plus près d'Illustrator que de Photoshop. -- python -c "print ''.join([chr(154 - ord(c)) for c in 'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"
On Fri, 03 Aug 2007 11:34:36 +0200, Jerome <jerome@nospam.com> wrote:
Pour ton problème, as-tu essayé de dessiner avec l'équivalent du
putpixel pour les canvas TkInter lorsque tu modifies ton image ?
Juste pour apporter une précision: il n'y a pas de putpixel sur les Canvas
Tkinter, et il n'y a pas de getpixel non plus. Un Canvas Tkinter est un
module de dessin *vectoriel*, et pas bitmap. Ceci permet par exemple de
faire:
r = monCanvas.create_rectangle(50, 50, 100, 100)
puis plus tard:
monCanvas.coords(r, 40, 30, 80, 150)
La variable r identifie un objet rectangle, que l'on manipule comme un
rectangle, et pas comme un ensemble de points. Ce qui n'est pas possible,
par contre, c'est de créer un rectangle, puis d'enlever des pixels dedans.
Le Canvas Tkinter est donc très utile pour faire des applis de dessin
vectoriel, et très em...bêtant pour faire du bitmap. En d'autres termes,
on est plus près d'Illustrator que de Photoshop.
--
python -c "print ''.join([chr(154 - ord(c)) for c in
'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"
Pour ton problème, as-tu essayé de dessiner avec l'équivalent du putpixel pour les canvas TkInter lorsque tu modifies ton image ?
Juste pour apporter une précision: il n'y a pas de putpixel sur les Canvas Tkinter, et il n'y a pas de getpixel non plus. Un Canvas Tkinter est un module de dessin *vectoriel*, et pas bitmap. Ceci permet par exemple de faire:
r = monCanvas.create_rectangle(50, 50, 100, 100)
puis plus tard:
monCanvas.coords(r, 40, 30, 80, 150)
La variable r identifie un objet rectangle, que l'on manipule comme un rectangle, et pas comme un ensemble de points. Ce qui n'est pas possible, par contre, c'est de créer un rectangle, puis d'enlever des pixels dedans.
Le Canvas Tkinter est donc très utile pour faire des applis de dessin vectoriel, et très em...bêtant pour faire du bitmap. En d'autres termes, on est plus près d'Illustrator que de Photoshop. -- python -c "print ''.join([chr(154 - ord(c)) for c in 'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"
al
Eric Brunel wrote:
Le Canvas Tkinter est donc très utile pour faire des applis de dessin vectoriel, et très em...bêtant pour faire du bitmap. En d'autres termes, on est plus près d'Illustrator que de Photoshop.
C'est exactement ça, le Canvas manipule des sous-objets vectoriel, alors que ce que je veux c'est rafraîchir un bitmap à l'écran.
Eric Brunel wrote:
Le Canvas Tkinter est donc très utile pour faire des applis de dessin
vectoriel, et très em...bêtant pour faire du bitmap. En d'autres termes,
on est plus près d'Illustrator que de Photoshop.
C'est exactement ça, le Canvas manipule des sous-objets vectoriel, alors que
ce que je veux c'est rafraîchir un bitmap à l'écran.
Le Canvas Tkinter est donc très utile pour faire des applis de dessin vectoriel, et très em...bêtant pour faire du bitmap. En d'autres termes, on est plus près d'Illustrator que de Photoshop.
C'est exactement ça, le Canvas manipule des sous-objets vectoriel, alors que ce que je veux c'est rafraîchir un bitmap à l'écran.
al
JB BUTET wrote:
Pour la rafraichir après changement, il y a une fonctione update() (je te laisse chercher, ce mot clef est le bon)
Merci pour cette piste, j'avais déjà essayé mais dans mon cas, comme le laissait deviner la doc, ça ne fait rien (et tous mes bitmaps sont bien globales puisque j'interviens dessus plusieurs fois).
Par contre j'ai trouvé une piste un peu plus propre que mes delete / create sauvages : 1 - Il faut dans tous les cas recréer le PhotoImage à partir du bitmap 2 - Utiliser la méthode Canvas.itemconfigure(idImage, image=ref au PhotoImage précédent)
JB BUTET wrote:
Pour la rafraichir après changement, il y a une fonctione update() (je
te laisse chercher, ce mot clef est le bon)
Merci pour cette piste, j'avais déjà essayé mais dans mon cas, comme le
laissait deviner la doc, ça ne fait rien (et tous mes bitmaps sont bien
globales puisque j'interviens dessus plusieurs fois).
Par contre j'ai trouvé une piste un peu plus propre que mes delete / create
sauvages :
1 - Il faut dans tous les cas recréer le PhotoImage à partir du bitmap
2 - Utiliser la méthode Canvas.itemconfigure(idImage, image=ref au
PhotoImage précédent)
Pour la rafraichir après changement, il y a une fonctione update() (je te laisse chercher, ce mot clef est le bon)
Merci pour cette piste, j'avais déjà essayé mais dans mon cas, comme le laissait deviner la doc, ça ne fait rien (et tous mes bitmaps sont bien globales puisque j'interviens dessus plusieurs fois).
Par contre j'ai trouvé une piste un peu plus propre que mes delete / create sauvages : 1 - Il faut dans tous les cas recréer le PhotoImage à partir du bitmap 2 - Utiliser la méthode Canvas.itemconfigure(idImage, image=ref au PhotoImage précédent)