Python 使用pywin32代码冻结可执行cx_=错误没有名为win32的模块

Python 使用pywin32代码冻结可执行cx_=错误没有名为win32的模块,python,winapi,tkinter,cx-freeze,pywin32,Python,Winapi,Tkinter,Cx Freeze,Pywin32,所以我有这个PDF打印机代码(代码从控制台完美运行),我想让它可执行.exe。 我通过发出cxfreeze-quickstart.exe命令尝试使用Python 3.8.2 cx_freeze。填充基础数据,并选择(G)作为GUI选项。一切进展顺利,得到了程序pdfprinter.exe,但当我尝试在Windows 10上运行它时,收到错误消息“没有名为win32的模块”。 有人能帮助我们如何从这段代码中生成一个可执行文件吗 导入win32api 导入win32print 导入回溯 从tkin

所以我有这个PDF打印机代码(代码从控制台完美运行),我想让它可执行.exe。 我通过发出cxfreeze-quickstart.exe命令尝试使用Python 3.8.2 cx_freeze。填充基础数据,并选择(G)作为GUI选项。一切进展顺利,得到了程序pdfprinter.exe,但当我尝试在Windows 10上运行它时,收到错误消息“没有名为win32的模块”。 有人能帮助我们如何从这段代码中生成一个可执行文件吗

导入win32api
导入win32print
导入回溯
从tkinter.filedialog导入askopenfilename
从tkinter进口*
从tkinter导入字体#*不导入字体或消息框
从tkinter导入消息框
root=Tk()
root.title(“Python打印机”)
根几何(“410x310”)
根目录。可调整大小(False,False)
root.tk.call('encoding'、'system'、'utf-8')
def字体大小(fs):
返回font.font(family='Helvetica',size=fs,weight='bold')
#添加网格
大型机=帧(根)
#grid(列=0,行=0,粘性=(N,W,E,S))
grid(列=0,行=0,粘性=(N))
mainframe.columnconfigure(0,权重=1)
mainframe.rowconfigure(0,权重=1)
mainframe.pack(pady=10,padx=0)
#创建一个_打印机变量
_打印机=StringVar(根)
#创建一个_颜色变量
_颜色=StringVar(根)
_filename=“”
#关于更改下拉列表值
def sel_打印机(*参数):
打印(_printer.get())
#链接功能以更改下拉列表
_打印机跟踪('w',选择打印机)
def选择颜色(*参数):
打印(_color.get())
#链接功能以更改下拉列表
_颜色跟踪('w',选择颜色)
def上载操作(事件=无):
全局文件名
_filename=filedialog.askopenfilename()
#打印('选定:',_文件名)
def打印操作(事件=无):
打印机_默认值={“DesiredAccess”:win32print.PRINTER_ALL_ACCESS}
pHandle=win32print.OpenPrinter(_printer.get(),打印机_默认值)
properties=win32print.GetPrinter(幻影,2)
属性['pDevMode'].Color=1如果str(_Color.get())=“Color”else=2
属性['pDevMode']。副本数=1
win32print.SetPrinter(幻影,2,属性,0)
如果不是_文件名:
messagebox.淋浴错误(“错误”,“未选择文件”)
返回
elif not_printer.get():
messagebox.showerror(“错误”,“未选择打印机”)
返回
尝试:
#win32print.SetDefaultPrinter(_printer.get())
win32api.ShellExecute(0,“打印”,_文件名,无,“.”,0)
win32print.ClosePrinter(幻影)
除:
通过
messagebox.batherror(“错误”,“打印文件时出错:”)
choices=[printer[2]用于win32print.EnumPrinters中的打印机(2)]
_printer.set(win32print.GetDefaultPrinter())#设置默认选项
popupMenu=选项菜单(主机、_打印机、*选项)
弹出菜单['font']=字体大小(12)
标签(大型机,text=“选择打印机”).grid(行=1,列=1)
网格(行=2,列=1)
#带选项的字典
选项=[“颜色”、“单色”]
_color.set(“color”)#设置默认选项
popupMenu2=选项菜单(主机,_颜色,*选项)
popupMenu2['font']=字体大小(12)
标签(大型机,text=“COLOR MODE”).grid(行=3,列=1)
popupMenu2.grid(行=4,列=1)
标签(大型机,text=“选择文件”).grid(行=5,列=1)
按钮=按钮(大型机,文本=u“\uD83D\uDCC1”'浏览',命令=上传操作)
按钮['font']=字体大小(12)
button.grid(行=6,列=1)
_copies=IntVar()
_复印件.套(1)
def拷贝数增加(事件=无):
_copies.set(_copies.get()+1)
def拷贝数减少(事件=无):
_copies.set(_copies.get()-1)
如果_copies.get()<1:
_复印件.套(1)
标签(大型机,textvariable=_个副本)。网格(columnspan=2)
按钮\帧=帧(主机)
按钮框架网格(columnspan=2)
dec_button=按钮(按钮框,文本=u“\u2212”,命令=u减少,fg=“深绿色”,bg=“白色”,高度=1,宽度=3)
dec_按钮['font']=字体大小(10)
inc\u按钮=按钮(按钮框架,文本=u“\uFF0B”,命令=u增加,fg=“深绿色”,bg=“白色”,高度=1,宽度=3)
inc_按钮['font']=字体大小(10)
button\u frame.columnconfigure(0,权重=1)
按钮\框架柱配置(1,权重=1)
dec_按钮网格(行=0,列=0,粘性=W+E)
inc_按钮网格(行=0,列=1,粘性=W+E)
标签(大型机).grid(行=10,列=1)
p_按钮=按钮(大型机,文本=u'\uD83D\uDDB6'+“打印”,命令=PrintAction,fg=“深绿色”,bg=“白色”)
p_按钮['font']=字体大小(18)
p_按钮网格(行=11,列=1)
root.mainloop()

似乎缺少包
pywin32
。您可以使用
pip
直接使用
pip
/
pip3
命令或使用
python-m pip安装pywin32
,其中
python
是您所需的python解释器(例如
python3
)@jonasdrottleff它从一开始就安装了,但我重新安装了它。从这里下载:正确的版本。但在构建cx_freeze可执行文件时,它仍然会显示相同的错误消息。不确定如何修复此问题。是否需要将python打包到exe文件中?例如。使用
pip uninstall pywin32
在中卸载win32模块CMD并使用
pip install pywin32
重新安装。@Artis从GitHub下载软件包时,是否运行了
python setup.py install
?如果创建可执行文件,可能必须包括此步骤(以及GitHub上描述的任何安装后过程)在您的构建中。似乎缺少包
pywin32
。您可以使用
pip
直接使用
pip
/
pip3
命令或使用
python-m pip安装pywin32
,其中
python
是您所需的python解释器(例如
python3
)@jonasdrottleff它从一开始就安装了,但我重新安装了它。从这里下载:正确的版本。但在构建时仍然会显示相同的错误消息
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()