bjr,
je voudrais imprimer le contenu d'un canevas,est-ce possible?
Est-il possible également d'éditer le contenu d'un canevas sous word?
merci d'avance pour votre aide.
Version imprimable
bjr,
je voudrais imprimer le contenu d'un canevas,est-ce possible?
Est-il possible également d'éditer le contenu d'un canevas sous word?
merci d'avance pour votre aide.
en fait mon idée de base n'est pas la bonne
donc je reformule ma question,
Est-il plutot possible d'inserer un canevas dans un widget text pour que je puisse
imprimer le contenu du text car le canevas contient des boutons placés par coordonnées?
Je ne vois pas l'intérêt de mettre un Canvas dans un widget Text.
A ma connaissance Tkinter ne permet pas l'impression (il existe peut être un module additionnel).
Si tu veux imprimer du texte, il faut d'abord le récurer avec la méthode get() de la classe Text.
Ensuite tu as plusieurs solutions:
Si tu es sur windows tu as le module win32print.
Tu peux aussi utiliser le module HtmlEasyPrinting de wxpython. Je n'ai jamais essayé mais ça à l'air très simple d'utilisation.
Tu as aussi le module QPrinter de pyqt.
Il y a certainement beaucoup d'autre solutions. voici quelques liens:
http://timgolden.me.uk/python/win32_how_do_i/print.html
http://wiki.wxpython.org/Printing
http://qt.developpez.com/doc/4.3/printing/
Bonjour,
C'est un sujet déjà évoqué. On peut créer un fichier postscript depuis un canvas.
Merci pour toutes ces précisions,je suis allé jeter un oeil à toutes ces ressources sans trouver de réponse qui me convienne.
Je vais essayer d'expliquer ce que je recherche:
-J'ai des canevas qui contiennent des images,sur ces images(dans le canevas)
j'ajoute des boutons qui sont placés en fonction de coordonnés recuperées dans une database.
un click sur un bouton(numéroté)affiche des informations dans un topleve().
-je voudrais imprimer un rapport qui contient chaque images avec les boutons
avec sous chaque images les infos récupérées dans la db sous forme de texte ou widget label,ce qui bloque c'est surtout le fait de vouloir imprimer un widget canvas qui contient d'autre widget.
merci pour votre aide car je suis completement bloqué.
Dans ce cas, tu devrais créer une image contenant ton canvas et tous les widgets.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 from PIL import ImageTk,ImageGrab from Tkinter import * def save_image(): x = can.winfo_rootx() y = can.winfo_rooty() w = can.winfo_width() h = can.winfo_height() image=ImageGrab.grab((x+2, y+2, x+w-2, y+h-2)) image.save("tmp.bmp") root=Tk() can=Canvas(root,width=100,height=100) can.pack() mon_image=ImageTk.PhotoImage(file='test.jpg') can.create_image(100,100,image=mon_image) b=Button(can,text="bouton",command=save_image) can.create_window((50,50),window=b) root.mainloop()
Merci c'est exactement ce que je cherchais comme solution je vais tester ça.
Je me suis plongé dans la doc de reportlab,cela me parait un peu compliqué au vu de mon niveau,donc ta solution me parait très adaptée.merci encore.
slts:king:
Ta solution est super.
Il a t-il maintenant un moyen d'ouvrir un document vierge ms word et d'y inserer les images crées ce script?
Je voudrais éviter de passer par du pdf.
Pour cela, il faut utiliser pywin32.Citation:
Il a t-il maintenant un moyen d'ouvrir un document vierge ms word et d'y inserer les images crées ce script?
Tout dépend de ce que tu veux faire.Citation:
Je voudrais éviter de passer par du pdf.
avant de generer une image en utilisant le code ci-dessus,j'essaie d'afficher des canvas à la suite dans un canvas avec scrolling comme expliqué dans une autre discussion .ceci pour effectuer un preview du rapport que je cherche à imprimer.
les images contenues dans les canvas sont celles inclusent dans la liste_vues
je recupere également des données d'une base de donnée pydblite.
le pb est que les images ne s'affichent pas
ci dessous le code (j'espere avoir mis les bonnes balises pour qu'il s'affiche bien,désolé si ce n'est pas le cas).
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 # -*- coding: cp1252 -*- from Tkinter import * from PyDbLite import Base class Report: "mise en place du rapport" def __init__(self,liste_vues,reg): self.reg=reg self.liste_vues=liste_vues db=Base(self.reg) db.open() db1=Base('acr_reg') db1.open() t=[r['type'] for r in db1 if r['reg']==self.reg] self.acr_type=t[0] fen=Toplevel() vsb = Scrollbar(fen, orient=VERTICAL) vsb.grid(row=0, column=1, sticky=N+S) self.c = Canvas(fen,yscrollcommand=vsb.set) self.c.grid(row=0, column=0, sticky="news") vsb.config(command=self.c.yview) fen.grid_rowconfigure(0, weight=1) fen.grid_columnconfigure(0, weight=1) self.c1=Frame(self.c) taille=len(self.liste_vues) r=0 if taille>0: while r<taille: self.r1=self.liste_vues[r] self.liste_vues[r]=Image(self) r=r+1 self.c.create_window(750,1000,window=self.c1) self.c.config(scrollregion=self.c.bbox("all")) fen.mainloop() class Image: def __init__(self,main): self.main=main canevas=Canvas(self.main.c1,width=700,height=500,bg='red') mon_image=PhotoImage(file='mon.image') canevas.create_image(100,100,image=mon_image) canevas.pack() canevas.update_idletasks()
c'est bon,j'avais simplement oublié quelques self.
Par contre j'essaie de trouver de la doc sur pywin32,Existe-t'il un tuto sur le sujet?
Comment créer un doc word et y placer des images?
cette manip permettrai à l'utilisateur de gerer ses entêtes et l'impression.
Bonjour,
Tu peux aussi utiliser générer du rtf avec PyRTF. C'est une version beta, mais je n'ai jamais eu de problème avec.
ex dans ton script :
Code:
1
2
3
4
5
6
7
8
9
10 def vuesToRTF(self): doc = PyRTF.Document() section = PyRTF.Section() doc.Sections.append(section) for vue in self.liste_vues: img = PyRTF.Image( vue ) section.append(PyRTF.Paragraph(img)) renderer = PyRTF.Renderer() fichier=open("test.rtf","w") renderer.Write(doc, fichier)
mon pb est que j'ai des boutons qui s'affichent à des coordonées extraitent
d'une db dans les canevas sur les images.
je voudrait récuperer le contenu du canevas complet avec les boutons qui sont numérotés car dans l'inteface,un click sur un bouton affiche des infos.
suite à tes infos données dans un autre tuto(mes pb avec PIL pour recuperer
la "photo" du canevas)je me suis orienté vers la solution grab de PIL.
Je voudrais éviter d'avoir à generer un pdf via reportlab en redessinant tout les boutons numérotés mais simplement utiliser reportlab pour afficher ces "photos" avec dessous un tableau avec les infos.Cette solution me parait
plus à ma portée.
Peut-être as tu une idée qui pourrait me simplifier la tache?
Merci pour ton investissement!
Si je résume :
Tu as un Canvas dans lequel tu places d'autres Canvas avec des images et des boutons, afin de les imprimer.
Tu veux utiliser reportLab pour afficher les "photos" de tes Canvas avec en dessous un tableau contenant des infos...
Grab fait une copie d'écran. Il faut donc que ce que tu souhaites copier soit visible.Citation:
Par contre j'obtient une impression du bas de mon écran,comment peut on limiter au contenu seul du canevas?
Est-ce que tu ne pourrais pas utiliser PIL pour dessiner tes boutons sur tes images ?
Je vais regarder de ce coté la,c'est une bonne piste.
merci