使用 cx_Freeze 将 Python3 脚本转换为 .exe,属性错误
Converting Python3 script to .exe with cx_Freeze, attribute error
在这里编写我的第一个 Python 应用程序和我的第一个 post 应用程序。
我 运行ning windows 10 Python 3.7 和 cx_Freeze 版本 5.1.1.
一旦我 运行 安装构建并双击可执行文件,我就会遇到错误:AttributeError: 'NoneType' object has no attribute 'write'。
我自己似乎无法弄清楚。
(也遇到图片找不到的问题,所以我在脚本中注释掉了,一次解决一个问题)
Tbh 我不确定从哪里开始,我相信错误是由于写入文本框代码而引发的:
def decorator(func):
def inner(inputStr):
try:
textbox.insert(INSERT, inputStr)
return func(inputStr)
except:
return func(inputStr)
return inner
sys.stdout.write=decorator(sys.stdout.write)
这是我创建的脚本。
from tkinter import *
from PIL import Image, ImageTk
root = Tk()
root.title("Ghost task")
root.geometry("640x640+0+0")
#Image load
#load = Image.open('Ghost.png')
#ghost = ImageTk.PhotoImage(load)
#img = Label(root, image=ghost)
#img.image = ghost
#img.place(x=0, y=0)
#Text
heading = Label(root, text="Finish workflow script", font =("arial", 20, "bold"), fg="steelblue").place(x=200, y=0)
label1 = Label(root, text="Provide the wf_group:", font =("arial", 12, "bold"), fg="steelblue").place(x=200, y=80)
label2 = Label(root, text="Provide the client:", font =("arial", 12, "bold"), fg="steelblue").place(x=200, y=103)
label3 = Label(root, text="Provide the user:", font =("arial", 12, "bold"), fg="steelblue").place(x=200, y=126)
label4 = Label(root, text="Provide the voucher no:", font =("arial", 12, "bold"), fg="steelblue").place(x=200, y=149)
bottom = Label(root, text="Version 1.01", font = ("arial", 6, "bold"), fg="black").place(x=580, y=625)
#Boxes
wfgroup = StringVar()
client = StringVar()
user = StringVar()
voucher = StringVar()
entry_box = Entry(root, textvariable=wfgroup, width=28, bg="lightgreen").place(x=445, y=85)
entry_box = Entry(root, textvariable=client, width=28, bg="lightgreen").place(x=445, y=107)
entry_box = Entry(root, textvariable=user, width = 28, bg="lightgreen").place(x=445, y=129)
entry_box = Entry(root, textvariable=voucher, width = 28, bg="lightgreen").place(x=445, y=151)
#Results
def do_mssql():
textbox.delete('1.0', END)
textbox.update()
print("Removed some useless information")
def do_oracle():
textbox.delete('1.0', END)
textbox.update()
print("Removed some useless information")
#Buttons
work = Button(root, text="MsSQL Buu", width=30, height=5, bg="pink", command=do_mssql).place(x=50, y=200)
work2 = Button(root, text="Oracle Buu", width=30, height=5, bg="pink", command=do_oracle).place(x=360, y=200)
#Text output
textbox=Text(root, width = 77, height = 20)
textbox.place(x=10, y=300)
def decorator(func):
def inner(inputStr):
try:
textbox.insert(INSERT, inputStr)
return func(inputStr)
except:
return func(inputStr)
return inner
sys.stdout.write=decorator(sys.stdout.write)
root.mainloop()
感谢我能得到的任何帮助。
//弗雷德
想通了。
是 .write 导致了这个问题。
我稍微重写了脚本。
不需要,但我就是这样解决的。
def do_mssql():
textbox.delete('1.0', END)
textbox.update()
sys.stdout("--This script is for MsSQL--\n")
def redirector(inputStr):
textbox.insert(INSERT, inputStr)
sys.stdout = redirector
从 sys.stdout.write 中删除了 .write
将 print() 更改为 sys.stdout 并且有效。 :)
//弗雷德
在这里编写我的第一个 Python 应用程序和我的第一个 post 应用程序。 我 运行ning windows 10 Python 3.7 和 cx_Freeze 版本 5.1.1.
一旦我 运行 安装构建并双击可执行文件,我就会遇到错误:AttributeError: 'NoneType' object has no attribute 'write'。 我自己似乎无法弄清楚。
(也遇到图片找不到的问题,所以我在脚本中注释掉了,一次解决一个问题)
Tbh 我不确定从哪里开始,我相信错误是由于写入文本框代码而引发的:
def decorator(func):
def inner(inputStr):
try:
textbox.insert(INSERT, inputStr)
return func(inputStr)
except:
return func(inputStr)
return inner
sys.stdout.write=decorator(sys.stdout.write)
这是我创建的脚本。
from tkinter import *
from PIL import Image, ImageTk
root = Tk()
root.title("Ghost task")
root.geometry("640x640+0+0")
#Image load
#load = Image.open('Ghost.png')
#ghost = ImageTk.PhotoImage(load)
#img = Label(root, image=ghost)
#img.image = ghost
#img.place(x=0, y=0)
#Text
heading = Label(root, text="Finish workflow script", font =("arial", 20, "bold"), fg="steelblue").place(x=200, y=0)
label1 = Label(root, text="Provide the wf_group:", font =("arial", 12, "bold"), fg="steelblue").place(x=200, y=80)
label2 = Label(root, text="Provide the client:", font =("arial", 12, "bold"), fg="steelblue").place(x=200, y=103)
label3 = Label(root, text="Provide the user:", font =("arial", 12, "bold"), fg="steelblue").place(x=200, y=126)
label4 = Label(root, text="Provide the voucher no:", font =("arial", 12, "bold"), fg="steelblue").place(x=200, y=149)
bottom = Label(root, text="Version 1.01", font = ("arial", 6, "bold"), fg="black").place(x=580, y=625)
#Boxes
wfgroup = StringVar()
client = StringVar()
user = StringVar()
voucher = StringVar()
entry_box = Entry(root, textvariable=wfgroup, width=28, bg="lightgreen").place(x=445, y=85)
entry_box = Entry(root, textvariable=client, width=28, bg="lightgreen").place(x=445, y=107)
entry_box = Entry(root, textvariable=user, width = 28, bg="lightgreen").place(x=445, y=129)
entry_box = Entry(root, textvariable=voucher, width = 28, bg="lightgreen").place(x=445, y=151)
#Results
def do_mssql():
textbox.delete('1.0', END)
textbox.update()
print("Removed some useless information")
def do_oracle():
textbox.delete('1.0', END)
textbox.update()
print("Removed some useless information")
#Buttons
work = Button(root, text="MsSQL Buu", width=30, height=5, bg="pink", command=do_mssql).place(x=50, y=200)
work2 = Button(root, text="Oracle Buu", width=30, height=5, bg="pink", command=do_oracle).place(x=360, y=200)
#Text output
textbox=Text(root, width = 77, height = 20)
textbox.place(x=10, y=300)
def decorator(func):
def inner(inputStr):
try:
textbox.insert(INSERT, inputStr)
return func(inputStr)
except:
return func(inputStr)
return inner
sys.stdout.write=decorator(sys.stdout.write)
root.mainloop()
感谢我能得到的任何帮助。 //弗雷德
想通了。
是 .write 导致了这个问题。 我稍微重写了脚本。 不需要,但我就是这样解决的。
def do_mssql():
textbox.delete('1.0', END)
textbox.update()
sys.stdout("--This script is for MsSQL--\n")
def redirector(inputStr):
textbox.insert(INSERT, inputStr)
sys.stdout = redirector
从 sys.stdout.write 中删除了 .write 将 print() 更改为 sys.stdout 并且有效。 :)
//弗雷德