从Tkinter或PMW打印

2024-05-29 06:30:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python Mega Widgets和Tkinter中创建了一个接口,它是SQlite3数据库的接口。查询结果将作为列表返回,并显示在显示屏主框架上的备注字段中。

我是否可以创建一个小功能,该功能将从一个按钮启动,该按钮将从默认打印机打印备注字段的内容?

类似于:

command = printMemo  #argument within the print button


#the print function I am looking for in pseudocode
def printMemo(memo):
       print memo

Tags: the功能框架数据库列表tkinter打印机widgets
3条回答

这取决于您使用的是windows、linux还是mac/unix。答案将根据运行此python脚本的系统而相应地改变。

窗口

要将打印作业发送到windows上的打印机,您将使用win32printhttp://timgolden.me.uk/python/win32_how_do_i/print.html

LINUX/UNIX/MAC系统

对于linux/unix/mac系统,您可以使用pkipplib库并利用CUPS(http://en.wikipedia.org/wiki/CUPS)运行CUPS的计算机是一个主机,它可以接受来自客户端计算机的打印作业,处理它们,并将它们发送到适当的打印机。 有关基于杯子的打印,请参见http://www.pykota.com/software/pkipplib

pkipplib是可以通过PyPi安装的第三方库。如果您熟悉pip的用法,您只需运行

pip install pkipplib

并且pkipplibpython模块将可供您导入到脚本中。然后,您可以在连接到linux/unix/mac CUPS打印机之后执行打印,类似于上面链接中的示例。像这样:

# CUPS' API
from pkipplib import pkipplib

# Create a CUPS client instance 
# cups = pkipplib.CUPS(url="http://server:631, \
#                      username="john", \
#                      password="5.%!oyu")
cups = pkipplib.CUPS()

# High level API : retrieve info about job 3 :
answer = cups.getJobAttributes(3)
print answer.job["document-format"]
# That's all folks !

# Lower level API :
request = cups.newRequest(pkipplib.IPP_GET_PRINTER_ATTRIBUTES)
request.operation["printer-uri"] = ("uri", 
                                    cups.identifierToURI("printers", "HP2100"))
for attribute in ("printer-uri-supported",                                     
                  "printer-type",
                  "member-uris") :
    # IMPORTANT : here, despite the unusual syntax, we append to              
    # the list of requested attributes :
    request.operation["requested-attributes"] = ("nameWithoutLanguage", attribute)

# Sends this request to the CUPS server    
answer = cups.doRequest(request)    

# Print the answer as a string of text
print answer

好问题。希望我的回答会有帮助。

注意:我使用Python3.3,所以我们需要导入tkinter和tkinter。。。

在下面的过程代码行中,需要用= StringVar()将文本变量定义为字符串变量(这里是text1)。

然后,当您创建entry小部件(这里是它的text_entry)时,您指示当用户按下按钮(.., textvariable = text1)时,哪个变量接受输入的值。

然后使用command =函数创建一个按钮小部件(这里是print_text(*args)),它将打印用户键入的内容。

因为text1是一个列表(或者可能是元组,不确定),所以需要使用属性的.get方法来获取输入的值。这里是print(text1.get())

我还补充了一些内容:text_entry.focus()在运行程序时将光标放在该小部件中,这样用户就不必在条目空间中单击,root.bind('<Return>', print_text)允许用户点击回车进行打印。

from tkinter import *
from tkinter import ttk

def print_text(*args):
    try:
        print(text1.get())
    except ValueError:
        pass

root = Tk()
root.title("Little tkinter app for printing")

mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column = 0, row = 0, sticky = (N,W,E,S))

mainframe.columnconfigure(0, weight = 1)
mainframe.rowconfigure(0, weight = 1)

text1 = StringVar()
text_entry = ttk.Entry(mainframe, width = 20, textvariable=text1)
text_entry.grid(column = 1, row = 2, sticky = (N,W,E,S))

ttk.Button(mainframe, text = "Print!", command =
           print_text(text1)).grid(column = 1, row = 3, sticky = (E))

for child in mainframe.winfo_children():
    child.grid_configure(padx = 5, pady = 5)

text_entry.focus()
root.bind('<Return>', print_text)

root.mainloop()

最简单的方法是创建一个文本文件,然后使用OS print命令(例如lpr on*nix)。如果需要,您可以合并标记(groff或latex),也可以创建postscript或PDF文件,但这需要做更多的工作!

这还有一个额外的优点,即print命令可以配置(环境或配置文件),因此可以在多个操作系统上工作。

相关问题 更多 >

    热门问题