打印python tkinter输出

时间:2010-06-01 16:29:45

标签: python printing tkinter

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

在我重写程序以创建更适合打印的布局之前,有人可以建议一种方法来解决这个问题吗?我读过的所有编程书都解决了将输出发送到打印机的问题,其中包括:“这是一个难以解决的问题,取决于与操作系统的交互。”由于与打印到屏幕相关的所有页面,我也很难找到相关的资源。

我在Ubuntu 9.04上使用Python 2.6。

3 个答案:

答案 0 :(得分:1)

原来你必须在导出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() 

感谢Rio here提供的解决方案。

答案 1 :(得分:0)

嗯,这是一个难以解决的问题,取决于与操作系统的交互。 (抱歉,无法抗拒!)

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

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

这绝对是Tk的一个问题;总是有,可能永远都会,因为似乎没有太多的需求,或者任何人都有兴趣以跨平台的方式解决问题。

答案 2 :(得分:0)

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

一个hacky解决方法是以编程方式在PIL中使用ImageGrab抓取你想要的窗口区域。

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