2010-06-01 139 views
5

我想打印python tkinter畫布的內容。我曾嘗試使用canvas的postscript方法來創建一個postscript文件,但我得到一個空白頁。我知道這是因爲我嵌入了小部件,並且這些不會通過postscript方法呈現。打印python tkinter輸出

在我重寫我的程序以創建更適合打印機的佈局之前,有人可以提出一種解決此問題的方法嗎?我所讀過的所有編程手冊都是通過一些手勢來發送輸出到打印機的問題,這些問題包括:「這是一個難以解決的問題,它取決於與操作系統的交互。」由於與打印到屏幕相關的所有頁面,我也很難找到關於此的資源。

我在Ubuntu 9.04上使用Python 2.6。

回答

0

嗯,這是一個難以解決的問題,取決於與操作系統的交互。 (抱歉,無法抗拒!)

畫布到後記解決方案僅適用於畫布上繪製的東西 - 它不處理嵌入式窗口。有庫可以將畫布轉換爲PDF,但我沒有經驗與他們,不知道他們是否處理嵌入式窗口或不(我猜不)。

pdflib,這是一個可以與python和tcl(以及Tkinter)集成的商業C庫。我對圖書館沒有經驗,我猜它可能無法處理嵌入式窗口。我認爲它更原始 - 給你命令來創建頁面,頁眉,頁腳等。

這絕對是Tk的問題;總是有,可能總是會,因爲似乎沒有太多的需求,或任何人的興趣,以跨平臺的方式解決問題。

+0

對於這個問題,我想我可以通過直接在畫布上繪製來重做工作。我會將其作爲僅用於打印的特殊功能來執行,或者以相同的方式重新執行屏幕功能。 爲了將來的參考,是否有更適合打印的gui包(即wxpython)?或者人們經常採用這種方法,爲屏幕編碼一個版本並單獨編碼打印? – Eric 2010-06-01 17:39:22

+0

@Eric:我知道wxPython對打印有一定的支持,但我從來沒有用過,所以我不知道它有多強大。如果打印是一個交易斷路器,您可能想嘗試安裝wxPython並運行演示以查看它是否滿足您的需求。 – 2010-06-01 18:03:11

0

我認爲你會接受Tkinter的限制。如果不是小部件,另一種方法是在PIL圖像繪製對象上繪製相同的圖像,因爲這兩個圖像具有相似的API。

一個怪異的解決方法是編程方式在PIL中使用ImageGrab獲取想要的窗口區域的屏幕抓取。

wxPython是一個體面的選擇。我個人更喜歡Qt,它肯定有出色的打印機支持。 Graphics View框架也非常出色。

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

感謝里約here的解決方案。

+0

這正是我的問題。謝謝! – 2015-09-20 23:46:46