2010-06-01 42 views
5

Tôi đang cố gắng in nội dung của canvas tiknter python. Tôi đã thử bằng cách sử dụng phương pháp postscript của canvas để tạo một tệp postscript, nhưng tôi nhận được một trang trống. Tôi biết điều này là bởi vì tôi đã nhúng các widget, và chúng không được render bởi phương thức postscript.In đầu in tiknter python

Trước khi tôi viết lại chương trình của mình để tạo bố cục thân thiện với máy in hơn, ai đó có thể đề xuất cách tiếp cận vấn đề này? Tất cả các cuốn sách lập trình mà tôi từng đọc đều tiếp cận vấn đề gửi đầu ra tới máy in với một chút vẫy tay, một cái gì đó dọc theo dòng: "Đó là một vấn đề khó khăn phụ thuộc vào tương tác với hệ điều hành." Tôi cũng có một thời gian khó tìm tài nguyên về điều này vì tất cả các trang liên quan đến in ấn trên màn hình.

Tôi đang sử dụng Python 2.6, trên Ubuntu 9.04.

Trả lời

0

Vâng, đó là một vấn đề khó khăn phụ thuộc vào tương tác với hệ điều hành. (Xin lỗi, không thể cưỡng lại!)

Giải pháp canvas-to-postscript chỉ hoạt động cho mọi thứ được vẽ trên canvas - nó không xử lý các cửa sổ được nhúng. Có những thư viện có thể chuyển đổi canvas thành PDF, nhưng tôi không có kinh nghiệm với chúng và không biết liệu chúng có xử lý các cửa sổ nhúng hay không (tôi đoán là không).

pdflib, là thư viện thương mại C có thể được tích hợp với python và tcl (và do đó, Tkinter). Tôi không có kinh nghiệm với thư viện, và tôi đoán nó có lẽ không xử lý các cửa sổ nhúng. Tôi nghĩ nó nguyên thuỷ hơn - cho bạn các lệnh để tạo trang, đầu trang, chân trang, v.v.

Đây chắc chắn là vấn đề với Tk; luôn luôn có, có khả năng luôn luôn sẽ vì dường như không có nhiều nhu cầu, hoặc quan tâm từ bất cứ ai để giải quyết vấn đề một cách nền tảng chéo.

+0

Đối với vấn đề này, tôi nghĩ rằng tôi có thể làm lại công việc bằng cách vẽ trực tiếp trên canvas. Tôi sẽ làm điều đó như một chức năng đặc biệt chỉ để in, hoặc làm lại chức năng màn hình theo cùng một cách. Để tham khảo trong tương lai, có gói gui (tức là wxpython) có khả năng thích nghi hơn để in không? Hay mọi người thường có cách tiếp cận này, mã hóa một phiên bản cho màn hình và mã hóa riêng cho việc in ấn? – Eric

+0

@Eric: Tôi biết rằng wxPython có một số hỗ trợ cho việc in ấn, nhưng tôi chưa bao giờ sử dụng nó vì vậy tôi không biết nó mạnh mẽ như thế nào. Nếu in ấn là một bộ xử lý thỏa thuận bạn có thể muốn thử cài đặt wxPython và chạy bản demo để xem nó có làm những gì bạn cần không. –

0

Tôi cho rằng việc bạn đạt đến giới hạn của Tkinter. Nếu không cho các vật dụng, một phương pháp khác là vẽ cùng một hình ảnh trên đối tượng vẽ hình ảnh PIL vì hai đối tượng này có các API tương tự nhau.

Giải pháp khắc phục sự cố là lập trình lấy màn hình của khu vực cửa sổ bạn muốn bằng ImageGrab trong PIL.

wxPython là giải pháp thay thế phong nha. Cá nhân tôi thích Qt, nó chắc chắn có hỗ trợ máy in tuyệt vời. Ngoài ra, khung công tác Chế độ xem đồ họa còn nổi bật.

1

Chỉ ra rằng bạn phải cập nhật canvas trước khi xuất bản ghi. Giống như vậy:

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

Cảm ơn Rio here vì giải pháp.

+0

Đây chính là vấn đề của tôi. Cảm ơn! –