我在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
答案 0 :(得分:2)
这取决于您使用的是Windows还是linux或mac / unix。答案将根据您运行此python脚本的系统进行相应更改。
<强> WINDOWS 强>
要在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
并且pkipplib
python模块可供您导入脚本。然后,您可以在连接到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
答案 1 :(得分:0)
好问题。希望我的回答能有所帮助。
注意:我使用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)
允许用户点击< kbd>输入进行打印。
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()
答案 2 :(得分:0)
最简单的方法是创建一个文本文件,然后使用OS打印命令(例如lpr on * nix)。如果需要,你可以加入标记(groff或者乳胶)你也可以创建一个postscript或PDF文件,但这样做还要多得多!
这样做的另一个好处是可以对打印命令进行配置(环境或配置文件),从而可以在多个操作系统上运行。
答案 3 :(得分:0)
我希望这会有所帮助。 是的,您可以使用win32com.client
要分发文件进行打印,可以使用openpyxl
您的数据进入xl电子表格,并使用默认打印机或所需的打印机将其发送以进行打印以获取更多信息,请阅读win32com.client以发送数据以进行打印