-
-
Save x011/a6fc62c42ec8adb1d648e3a1827134bf to your computer and use it in GitHub Desktop.
| ''' | |
| Project: curinga | |
| Time: 2020/03/07 01:37 | |
| ''' | |
| import win32api | |
| import win32print | |
| import traceback | |
| from tkinter.filedialog import askopenfilename | |
| from tkinter import * | |
| from tkinter import font # * doesn't import font or messagebox | |
| from tkinter import messagebox | |
| root = Tk() | |
| root.title("Python Printer") | |
| root.geometry("410x310") | |
| root.resizable(False, False) | |
| root.tk.call('encoding', 'system', 'utf-8') | |
| def font_size(fs): | |
| return font.Font(family='Helvetica', size=fs, weight='bold') | |
| # Add a grid | |
| mainframe = Frame(root) | |
| #mainframe.grid(column=0,row=0, sticky=(N,W,E,S) ) | |
| mainframe.grid(column=0,row=0, sticky=(N) ) | |
| mainframe.columnconfigure(0, weight = 1) | |
| mainframe.rowconfigure(0, weight = 1) | |
| mainframe.pack(pady = 10, padx = 0) | |
| # Create a _printer variable | |
| _printer = StringVar(root) | |
| # Create a _color variable | |
| _color = StringVar(root) | |
| _filename = "" | |
| # on change dropdown value | |
| def sel_printer(*args): | |
| print( _printer.get() ) | |
| # link function to change dropdown | |
| _printer.trace('w', sel_printer) | |
| def sel_color(*args): | |
| print( _color.get() ) | |
| # link function to change dropdown | |
| _color.trace('w', sel_color) | |
| def UploadAction(event=None): | |
| global _filename | |
| _filename = filedialog.askopenfilename() | |
| #print('Selected:', _filename) | |
| def PrintAction(event=None): | |
| PRINTER_DEFAULTS = {"DesiredAccess":win32print.PRINTER_ALL_ACCESS} | |
| pHandle = win32print.OpenPrinter(_printer.get(), PRINTER_DEFAULTS) | |
| properties = win32print.GetPrinter(pHandle, 2) | |
| properties['pDevMode'].Color = 1 if str(_color.get()) == "Color" else 2 | |
| properties['pDevMode'].Copies = 1 | |
| win32print.SetPrinter(pHandle, 2, properties, 0) | |
| if not _filename: | |
| messagebox.showerror("Error", "No File Selected") | |
| return | |
| elif not _printer.get(): | |
| messagebox.showerror("Error", "No Printer Selected") | |
| return | |
| try: | |
| #win32print.SetDefaultPrinter(_printer.get()) | |
| win32api.ShellExecute(0, "print", _filename, None, ".", 0) | |
| win32print.ClosePrinter(pHandle) | |
| except: | |
| pass | |
| messagebox.showerror("Error", "There was an error printing the file :(") | |
| choices = [printer[2] for printer in win32print.EnumPrinters(2)] | |
| _printer.set(win32print.GetDefaultPrinter()) # set the default option | |
| popupMenu = OptionMenu(mainframe, _printer, *choices) | |
| popupMenu['font'] = font_size(12) | |
| Label(mainframe, text="SELECT PRINTER").grid(row = 1, column = 1) | |
| popupMenu.grid(row = 2, column =1) | |
| # Dictionary with options | |
| choices = ["COLOR", "MONOCHROME"] | |
| _color.set("COLOR") # set the default option | |
| popupMenu2 = OptionMenu(mainframe, _color, *choices) | |
| popupMenu2['font'] = font_size(12) | |
| Label(mainframe, text="COLOR MODE").grid(row = 3, column = 1) | |
| popupMenu2.grid(row = 4, column =1) | |
| Label(mainframe, text="SELECT FILE").grid(row = 5, column = 1) | |
| button = Button(mainframe, text=u"\uD83D\uDCC1" ' BROWSE', command=UploadAction) | |
| button['font'] = font_size(12) | |
| button.grid(row = 6, column =1) | |
| _copies = IntVar() | |
| _copies.set(1) | |
| def copies_increase(event=None): | |
| _copies.set(_copies.get() + 1) | |
| def copies_decrease(event=None): | |
| _copies.set(_copies.get() - 1) | |
| if _copies.get() < 1 : | |
| _copies.set(1) | |
| Label(mainframe, textvariable=_copies).grid(columnspan=2) | |
| button_frame = Frame(mainframe) | |
| button_frame.grid(columnspan=2) | |
| dec_button = Button(button_frame, text=u"\u2212", command=copies_decrease, fg="dark green", bg = "white", height=1, width=3 ) | |
| dec_button['font'] = font_size(10) | |
| inc_button = Button(button_frame, text=u"\uFF0B", command=copies_increase, fg="dark green", bg = "white", height=1, width=3 ) | |
| inc_button['font'] = font_size(10) | |
| button_frame.columnconfigure(0, weight=1) | |
| button_frame.columnconfigure(1, weight=1) | |
| dec_button.grid(row=0, column=0, sticky=W+E) | |
| inc_button.grid(row=0, column=1, sticky=W+E) | |
| Label(mainframe).grid(row = 10, column = 1) | |
| p_button = Button(mainframe, text=u'\uD83D\uDDB6' + " PRINT", command=PrintAction, fg="dark green", bg = "white") | |
| p_button['font'] = font_size(18) | |
| p_button.grid(row = 11, column =1) | |
| root.mainloop() |
x011
commented
Mar 7, 2020
Hello! I am trying to make an .exe with this code and cx_freeze package. The .exe is made with cxfreeze-quickstart.exe execution. But then when I try to open this PDFprinter.exe it throws an error "no module named win32". I am thinking this is somehow related the pywin32 package..
I just wonder, have you tried to make an .exe executable program with this code? Maybe by any other way instead of cx_freeze?
Thank You! And Thanks for great code!
it is giving me error like this please help : Exception in Tkinter callback
Traceback (most recent call last):
File "D:\Users\Lucifer\AppData\Local\Programs\Python\Python37-32\lib\tkinter_init_.py", line 1702, in call
return self.func(*args)
File "D:/Users/Lucifer/Python/letsdoitprint.py", line 52, in PrintAction
pHandle = win32print.OpenPrinter(_printer.get(), PRINTER_DEFAULTS)
pywintypes.error: (5, 'OpenPrinter', 'Access is denied.'), Although I have Installed the Printer and also the drivers required to do printing.
Help Bro Please...
Please have a look at https://stackoverflow.com/a/37586129/797495
Great work @x011 could I ask how I can just print only text, not a file?
thnx!
Great work @x011 could I ask how I can just print only text, not a file? thnx!
Tks! Unfortunately, this code can only print text.
Hallo everyone iam faceing a problem , its always giving me an error that the printer name ist not valid . how can i solve it ?
thanks in advance
'pHandle = win32print.OpenPrinter(_printer.get(), PRINTER_DEFAULTS)'

