Как печатать через локальный или сетевой принтер в tkinter

Я хочу выбрать один из установленных принтеров на моем компьютере и печатать через него, но мое поле со списком не отображает принтеры на моем компьютере, а печатает на моем терминале в моей среде 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 framework.


person AD WAN    schedule 04.09.2017    source источник


Ответы (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()
person Goran    schedule 09.01.2018
comment
Не могли бы вы объяснить разницу и почему вы внесли эти изменения в регистратор? - person NatNgs; 09.01.2018
comment
С приведенным выше кодом установленный принтер выводит в поле со списком, но когда я набираю содержимое и хочу распечатать, выбранный принтер не печатает содержимое, и, пожалуйста, прокомментируйте свой код. - person AD WAN; 10.01.2018
comment
Страница слишком мала для печати, попробуйте использовать меньший шрифт. - person AD WAN; 10.01.2018
comment
У @Goran есть какие-либо предложения, чтобы заставить его работать лучше - person AD WAN; 18.01.2018
comment
Могу попробовать в понедельник, когда вернусь из поездки. - person Goran; 19.01.2018
comment
@Горан, пожалуйста, ты вернулся? - person AD WAN; 05.02.2018
comment
Привет. Да, я вернулся. Ошибка, которую он выдает, связана с тем, что ваша конфигурация Блокнота. Попробуйте распечатать прямо из блокнота, и если ошибка будет такой же, попробуйте перенастроить его. - person Goran; 05.02.2018
comment
когда я печатаю из блокнота, он не дает никаких ошибок, принтер может выполнить задание - person AD WAN; 28.02.2018
comment
@Goran любой ответ от вас на этот вопрос - person AD WAN; 02.05.2018
comment
Попробуйте код теперь сделать перенос слов в текстовом поле. У меня нет ошибок при печати, поэтому трудно найти ошибку на вашем компьютере. - person Goran; 04.05.2018