2017-09-04 149 views
0

コンピュータにインストールされているプリンタを選択して印刷したいのですが、コンボボックスがプリンタに表示されずに自分の端末に印刷されます。tkinterでローカルプリンタまたはネットワークプリンタを使って印刷する方法

はthis.Haveを行うためのソリューションに到着し日間のためにこれをしようとしている以下のit.This私のコードについて読んだ後に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フレームワークでテキストボックスにコンテンツを印刷する。

答えて

0

これは作成したものですか?このコードでは、コンボボックスにリストされたプリンタを作成し、テキストボックスの内容をtempfileに格納してから、コンテンツをwin32apiとwin32printのpythonモジュールを介して印刷します。私が試した3台のコンピュータで働いています。

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:以下のコードを使用すると、このエラー What I am getting as an error

+0

あなたは違いを説明してくださいすることができますが、ロガーにこれらの変更をした理由は? – NatNgs

+0

上記のコードでは、インストールされているプリンタがcomboxに出力しますが、コンテンツを入力して印刷する場合は、内容を印刷せずにコードにコメントしてください。 –

+0

小さなページを印刷すると、小さいフォントを使用して印刷します。 –

関連する問題