|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Bonjour à tous,
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). Merci de vos lumières. |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
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. > > |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
> 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 ? |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
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. |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
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... ;-) |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
-----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 iD8DBQFGsxBDetOZWwsO2AERArDZAKCFfFOO6Ux5IgYSsPIbRQ fN3a04lwCgowR/ 4PAt0Zh2P1pDlem2rhkDY5E= =oseI -----END PGP SIGNATURE----- |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
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+-'])" |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
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. |
|
![]() |
| Outils de la discussion | |
|
|