打印python tkinter输出

打印python tkinter输出,python,printing,tkinter,Python,Printing,Tkinter,我正在尝试打印python tkinter画布的内容。我曾尝试使用canvas的postscript方法创建postscript文件,但得到了一个空白页面。我知道这是因为我有嵌入式小部件,而这些小部件不是通过postscript方法呈现的 在我重写我的程序来创建一个更友好的打印机布局之前,有人能建议一种解决这个问题的方法吗?我读过的所有编程书籍都涉及到这样一个问题,即用一点手势将输出发送到打印机,大致是这样的:“这是一个困难的问题,取决于与操作系统的交互。”我也很难找到关于这方面的资源,因为所有

我正在尝试打印python tkinter画布的内容。我曾尝试使用canvas的postscript方法创建postscript文件,但得到了一个空白页面。我知道这是因为我有嵌入式小部件,而这些小部件不是通过postscript方法呈现的

在我重写我的程序来创建一个更友好的打印机布局之前,有人能建议一种解决这个问题的方法吗?我读过的所有编程书籍都涉及到这样一个问题,即用一点手势将输出发送到打印机,大致是这样的:“这是一个困难的问题,取决于与操作系统的交互。”我也很难找到关于这方面的资源,因为所有与打印到屏幕相关的页面


我正在Ubuntu 9.04上使用Python 2.6。

这是一个困难的问题,取决于与操作系统的交互。(对不起,无法抗拒!)

canvas-to-postscript解决方案只适用于在画布上绘制的东西——它不处理嵌入式窗口。有一些库可以将画布转换为PDF,但我没有使用它们的经验,也不知道它们是否处理嵌入式窗口(我猜不是)

有,这是一个商业C库,可以与python和tcl(以及Tkinter)集成。我没有使用该库的经验,我猜它可能也不能处理嵌入式窗口。我认为它更为原始--为您提供创建页面、页眉、页脚等的命令


这肯定是传统知识的问题;一直都有,可能永远都会,因为似乎没有太多的需求,也没有任何人对以跨平台方式解决问题感兴趣

我认为你已经达到了极限。如果不是小部件,另一种方法是在PIL image draw对象上绘制相同的图像,因为两者具有相似的API

一个棘手的解决办法是,在PIL中使用ImageGrab,通过编程获取所需窗口区域的屏幕抓取


wxPython是一个不错的选择。就我个人而言,我更喜欢Qt,它当然有出色的打印机支持。图形视图框架也很出色。

结果表明,在导出postscript之前,必须更新画布。像这样:

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() 

感谢力拓的解决方案

对于这个问题,我想我可以直接在画布上画画来重做。我会把它作为一个特殊的打印功能,或者用同样的方法重做屏幕功能。作为将来的参考,是否有更适合打印的gui包(即wxpython)?或者人们经常采用这种方法,为屏幕编码一个版本,然后为打印单独编码?@Eric:我知道wxPython对打印有一些支持,但我从未使用过,所以我不知道它有多强大。如果打印是一个交易破坏者,你可能想尝试安装wxPython并运行演示,看看它是否满足你的需要。这正是我的问题。谢谢