2017-09-04 2 views
0

Je veux sélectionner l'une des imprimantes installées sur mon ordinateur et les imprimer mais ma combobox n'affiche pas les imprimantes sur ma machine mais imprime plutôt vers mon terminal dans mon IDE.Comment imprimer via une imprimante locale ou réseau dans tkinter

ont essayé pendant des jours avec arriver à la solution pour faire this.Have installé le module à win32print après avoir lu patchage mon code ci-dessous:

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() 

Comment puis-je obtenir ce que je veux pour imprimer le contenu dans ma zone de texte avec le framework tkinter.

Répondre

0

Est-ce ce que vous vouliez créer? Avec ce code j'ai fait les imprimantes énumérées dans la zone de liste déroulante, mettre le contenu de la zone de texte au fichier temporaire, puis le contenu est imprimé via win32api et le module win32print python. Cela fonctionne à 3 ordinateurs j'ai essayé.

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) 


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() 

EDIT: Avec le code ci-dessous, cette erreur What I am getting as an error

+0

Pouvez-vous s'il vous plaît expliquer la différence et pourquoi vous avez fait ces changements à l'enregistreur? – NatNgs

+0

Avec le code ci-dessus l'imprimante installée en sortie à la combox, mais quand je tape le contenu et que vous voulez imprimer le prrinter sélectionné ne pas imprimer le contenu et s'il vous plaît veuillez commenter votre code. –

+0

Page à petite à imprimer essayez d'utiliser une police plus petite. –