【问题标题】:Printing python tkinter output打印 python tkinter 输出
【发布时间】:2010-06-01 16:29:44
【问题描述】:

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

在我重写程序以创建对打印机更友好的布局之前,有人可以提出解决此问题的方法吗?我读过的所有编程书籍都解决了将输出发送到打印机的问题,有点挥手,类似于:“这是一个取决于与操作系统交互的难题。”我也很难找到有关这方面的资源,因为所有页面都与打印到屏幕相关。

我在 Ubuntu 9.04 上使用 Python 2.6。

【问题讨论】:

    标签: python printing tkinter


    【解决方案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 的解决方案。

    【讨论】:

    • 这正是我的问题。谢谢!
    【解决方案2】:

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

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

    pdflib,这是一个可以与python和tcl(以及Tkinter)集成的商业C库。我对图书馆没有经验,我猜它可能也不处理嵌入式窗口。我认为它更原始——给你命令来创建页面、页眉、页脚等。

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

    【讨论】:

    • 对于这个问题,我想我可以通过直接在画布上绘制来重做工作。我要么将其作为仅用于打印的特殊功能,要么以相同的方式重做屏幕功能。供以后参考,有没有更适应打印的gui包(即wxpython)?还是人们经常采用这种方法,为屏幕编码一个版本,为打印单独编码?
    • @Eric:我知道 wxPython 对打印有一些支持,但我从未使用过它,所以我不知道它有多强大。如果打印是一个交易破坏者,您可能想尝试安装 wxPython 并运行演示以查看它是否满足您的需求。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-08
      相关资源
      最近更新 更多