3

我在 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
4

4 回答 4

2

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

视窗

要将打印作业发送到 Windows 上的打印机,您将使用win32print http://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 的计算机是可以接受来自客户端计算机的打印作业的主机,处理并将它们发送到相应的打印机。有关基于 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
于 2012-11-03T13:37:06.397 回答
0

我希望这将有所帮助。是的,您可以使用 win32com.client

要发送文件进行打印,您可以使用 openpyxl 来

您的数据到 xl 电子表格并使用默认或所需打印机发送以进行打印以获取更多信息,请阅读 win32com.client 以发送数据以进行打印

于 2020-07-21T05:45:44.060 回答
0

最简单的方法是创建一个文本文件,然后使用操作系统的打印命令(例如 *nix 上的 lpr)。如有必要,您可以合并标记(groff 或乳胶)您还可以创建 postscript 或 PDF 文件,但这需要更多的工作!

这具有额外的优势,即可以使打印命令可配置(环境或配置文件),因此可以在多个操作系统上工作。

于 2015-12-15T17:17:57.907 回答
-1

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

注意:我使用 python 3.3,所以我们需要导入 tkinter 和 Tkinter ...

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

然后,当您创建条目小部件(此处为它text_entry)时,您指示哪个变量采用用户点击按钮时输入的值(.., textvariable = text1)

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

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

我还添加了一些东西:text_entry.focus()当您运行程序时将光标放在该小部件中,这样用户就不必在输入空间中单击并root.bind('<Return>', print_text)允许用户点击Enter打印。

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()
于 2013-01-18T03:09:19.453 回答