J'essaie d'imprimer le contenu d'un canvas tkinter python. J'ai essayé d'utiliser la méthode postscript de canvas pour créer un fichier postscript, mais j'ai une page blanche. Je sais que c'est parce que j'ai des widgets incorporés, et ceux-ci ne sont pas rendus par la méthode postscript. Avant de réécrire mon programme pour créer une mise en page plus facile à imprimer, quelqu'un peut-il suggérer un moyen d'aborder ce problème? Tous les livres de programmation que j'ai lus abordent le problème de l'envoi de sortie à une imprimante avec un peu de main-ondulation, quelque chose du genre: "C'est un problème difficile qui dépend de l'interaction avec le système d'exploitation." J'ai également du mal à trouver des ressources à ce sujet en raison de toutes les pages liées à l'impression à l'écran. J'utilise Python 2.6 sous Ubuntu 9.04.Impression de la sortie python tkinter
Répondre
Eh bien, c'est un problème difficile qui dépend de l'interaction avec le système d'exploitation. (Désolé, n'a pas pu résister!)
La solution canvas-to-postscript ne fonctionne que pour les éléments dessinés sur la toile - elle ne gère pas les fenêtres incorporées. Il y a des bibliothèques qui peuvent convertir une toile en PDF, mais je n'ai aucune expérience avec elles et je ne sais pas si elles traitent des fenêtres incorporées ou non (je suppose que non).
Il existe pdflib, qui est une bibliothèque C commerciale qui peut être intégrée avec python et tcl (et ainsi, Tkinter). Je n'ai aucune expérience avec la bibliothèque, et je suppose qu'elle ne gère probablement pas non plus les fenêtres intégrées. Je pense que c'est plus primitif - vous donnant des commandes pour créer des pages, des en-têtes, des pieds de page, etc.
Ceci est définitivement un problème avec Tk; a toujours, probablement toujours, car il ne semble pas y avoir beaucoup de demande ou d'intérêt de la part de qui que ce soit pour résoudre le problème de manière multi-plateforme.
Je pense que votre butting jusqu'à la limite de Tkinter. Si ce n'est pas le cas pour les widgets, une autre méthode consiste à dessiner la même image sur un objet de dessin d'image PIL car les deux ont des API similaires.
Une solution de contournement hacky serait de prendre une capture d'écran de la zone de fenêtre que vous voulez utiliser ImageGrab dans PIL.
wxPython est une alternative décente. Personnellement, je préfère Qt, il a certainement un excellent support d'imprimante. En outre, le cadre de la vue graphique est remarquable.
Il s'avère que vous devez mettre à jour le canevas avant d'exporter le post-scriptum. Comme si:
from Tkinter import *
root = Tk()
canvas = Canvas(bg='white', width = 200, height = 200)
canvas.pack()
canvas.create_line(0, 0, 199, 199, fill="blue", width = 5)
canvas.create_line(0, 199, 199, 0, fill="blue", width = 5)
canvas.update()
canvas.postscript(file = "x.ps")
root.mainloop()
Merci à Rio here pour la solution.
C'était exactement mon problème. Merci! –
- 1. Impression de la version Python dans la sortie
- 2. Python tkInter Fun d'entrée
- 3. Python Tkinter Return
- 4. Menu d'aide de Python Tkinter
- 5. Impression de la sortie de classes autres que la classe principale avec python?
- 6. impression java sur papier - sortie de formatage pour impression
- 7. impression sortie protovis (par programmation)
- 8. impression de sortie de tableau de fichiers
- 9. Python: suppression d'une trame TKinter
- 10. python tkinter listbox: ajout d'éléments
- 11. impression 999 ligne dans l'écran de sortie
- 12. découpage de texte en python/tkinter
- 13. validation de la saisie de texte Python Tkinter
- 14. Le programme Twisted/tkinter se bloque à la sortie
- 15. E/S de fichier Python avec Tkinter
- 16. Impression de la sortie du débogage dans les programmes Windows
- 17. Python Tkinter écouteur dans la zone de texte
- 18. Effacer la fenêtre tkinter
- 19. Problème sortie PHP impression sur plusieurs lignes
- 20. GUI Python (tkinter; pygtk + glade), py2exe
- 21. générer du code Tkinter python compilé
- 22. Impression de noms de bas de page par Python
- 23. Python Tkinter Tk/Tcl utilisation Problème
- 24. Mac Ports Python 2.6.6 et Tkinter
- 25. Aide Créer une classe Python avec Tkinter
- 26. Python Tkinter comparant des objets PhotoImage
- 27. impression bit représentation de nombres en python
- 28. Comment cacher la console Windows avec python Tkinter?
- 29. Python/Tkinter: Appliquer la méthode .attributes() à Frame vs. Window?
- 30. Erreur dans la programmation gui en python en utilisant tkinter
Pour ce problème, je pense que je peux refaire le travail en dessinant directement sur une toile. Je le ferai soit comme une fonction spéciale juste pour l'impression, soit pour refaire la fonctionnalité de l'écran de la même manière. Pour référence future, existe-t-il un package gui (ie wxpython) plus adaptable à l'impression? Ou est-ce que les gens adoptent souvent cette approche, consistant à coder une version pour l'écran et à coder séparément pour l'impression? – Eric
@Eric: Je sais que wxPython a un certain support pour l'impression, mais je ne l'ai jamais utilisé donc je ne sais pas à quel point il est robuste. Si l'impression est un deal-breaker, vous pouvez essayer d'installer wxPython et lancer la démo pour voir si elle fait ce dont vous avez besoin. –