【问题标题】:How to print through local or network printer in tkinter如何在 tkinter 中通过本地或网络打印机进行打印
【发布时间】:2017-09-04 16:38:45
【问题描述】:

我想在我的计算机上选择一台已安装的打印机并通过它打印,但我的组合框不显示我机器上的打印机,而是打印到我的 IDE 中的终端。

几天来一直在尝试这个解决方案来做到这一点。在阅读后安装了 win32print 模块。这是我下面的代码:

from tkinter import *
from tkinter import ttk
import win32print



def installed_printer():
    printers = win32print.EnumPrinters(2)
      for p in printers:
         return(p)



def locprinter():
    pt = Toplevel()
    pt.geometry("250x250")
    pt.title("choose printer")
    LABEL = Label(pt, text="select Printer").pack()
    PRCOMBO = ttk.Combobox(pt, width=35, 
    textvariable=installed_printer).pack()
    BUTTON = ttk.Button(pt, text="refresh", 
    command=installed_printer).pack()


root = Tk()
root.title("printer selection in tkinter")
root.geometry("400x400")


menubar = Menu(root)
root.config(menu=menubar)

file_menu = Menu(menubar)
menubar.add_cascade(label="File", menu=file_menu)
file_menu.add_command(label="printer", command=locprinter)


LAB = Label(root, text="Comment")
T2 = Text(root, width=40, height=10)


def INFO():
print(T2.get("1.0", END))


Print_Button = Button(root, text ="Print", command = 
INFO).place(x=180,y=250)

LAB.pack()
T2.pack()

root.mainloop()

如果我想使用 tkinter 框架在我的文本框中打印内容,我该如何实现这一点。

【问题讨论】:

    标签: python tkinter printing textbox printers


    【解决方案1】:

    这是你想要创建的吗?

        from tkinter import *
    from tkinter import ttk
    import win32api
    import win32print
    import tempfile
    
    
    
    def installed_printer():
        printers = win32print.EnumPrinters(2)
        for p in printers:
            return(p)
    
    printerdef = ''
    
    def locprinter():
        pt = Toplevel()
        pt.geometry("250x250")
        pt.title("choose printer")
        var1 = StringVar()
        LABEL = Label(pt, text="select Printer").pack()
        PRCOMBO = ttk.Combobox(pt, width=35,textvariable=var1)
        print_list = []
        printers = list(win32print.EnumPrinters(2))
        for i in printers:
            print_list.append(i[2])
        print(print_list)
        # Put printers in combobox
        PRCOMBO['values'] = print_list
        PRCOMBO.pack()
        def select():
            global printerdef
            printerdef = PRCOMBO.get()
            pt.destroy()
        BUTTON = ttk.Button(pt, text="Done",command=select).pack()
    
    root = Tk()
    root.title("printer selection in tkinter")
    root.geometry("400x400")
    
    
    menubar = Menu(root)
    root.config(menu=menubar)
    
    file_menu = Menu(menubar)
    menubar.add_cascade(label="File", menu=file_menu)
    file_menu.add_command(label="printer", command=locprinter)
    
    
    LAB = Label(root, text="Comment")
    T2 = Text(root, width=40, height=10, wrap=WORD)
    
    
    def INFO():
        printText = T2.get("1.0", END)
        print(printText)
        print(printerdef)
        filename = tempfile.mktemp(".txt")
        open(filename, "w").write(printText)
        # Bellow is call to print text from T2 textbox
        win32api.ShellExecute(
            0,
            "printto",
            filename,
            '"%s"' % win32print.GetDefaultPrinter(),
            ".",
            0
        )
    
    
    Print_Button = Button(root, text ="Print", command=INFO).place(x=180,y=250)
    
    LAB.pack()
    T2.pack()
    
    root.mainloop()
    

    【讨论】:

    • 您能解释一下差异以及您为什么对记录器进行这些更改吗?
    • 使用上面的代码,安装的打印机输出到组合框,但是当我输入内容并想要打印选定的打印机时,不打印内容,请评论您的代码。
    • 页面变小以打印尝试使用较小的字体。
    • @Goran 确实有任何建议可以让它更好地工作
    • 周一出差回来可以试试。
    猜你喜欢
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 2011-09-12
    • 2017-04-21
    相关资源
    最近更新 更多