所以我编写了一个应用程序,它允许您将提供的信息存储到列表框中,列表框也可用于在某处打印数据。 (创建一个存储它的文本。)我也尝试过以前用户帖子的所有建议,但无法找到我的案例。任何帮助表示赞赏。
由于某种原因,我得到了你在标题中看到的错误。
这是我的代码:
from tkinter import*
from os import open
def addData():
dataInsert = dataEntry.get()
itemList.insert(END, dataInsert.upper())
dataEntry.delete(0, END)
def deleteData():
dataSelect = itemList.curselection()
itemList.delete(dataSelect)
def clearData():
itemList.delete(0, END)
def printData():
dataDirectory = filedialog.askdirectory()
f = open('items.txt', dataDirectory, 'ab+')
f.write(bytes('', itemList.get(), 'UTF-8'))
f.close()
def rootExit():
root.destroy()
root = Tk()
root.config(bg='gray79')
root.title('Inventory Recording Systems')
root.geometry('1300x800')
root.resizable(width=False, height=False)
mainLabel = Label(text='Inventory Recording Systems',
font=('comic sans ms', 20, 'bold'),
bg='gray79',
fg='black')
mainLabel.place(x=360, y=10)
f1 = Frame(root,
bg='black',
width=300,
height=40)
f1.place(x=40, y=22)
f2 = Frame(root,
bg='black',
width=300,
height=40)
f2.place(x=950, y=22)
dataLabel = Label(root,
text='Enter Data:',
font=('comic sans ms', 20, 'bold'),
bg='gray79')
dataLabel.place(x=10, y=130)
dataEntry = Entry(root,
font=('arial', 16, 'bold'))
dataEntry.place(x=250, y=142)
itemList = Listbox(root,
font=('arial', 15, 'bold'),
width=47,
height=16)
itemList.place(x=10, y=200)
addButton = Button(root,
text='Add Data',
font=('arial', 20, 'bold'),
bg='gray89',
fg='black',
relief=GROOVE,
width=15,
height=1,
bd=5,
command=addData)
addButton.place(x=865, y=215)
deleteButton = Button(root,
text='Delete Data',
font=('arial', 20, 'bold'),
bg='gray89',
fg='black',
relief=GROOVE,
width=15,
height=1,
bd=5,
command=deleteData)
deleteButton.place(x=865, y=345)
clearButton = Button(root,
text='Clear Data',
font=('arial', 20, 'bold'),
bg='gray89',
fg='black',
relief=GROOVE,
width=15,
height=1,
bd=5,
command=clearData)
clearButton.place(x=865, y=470)
printButton = Button(root,
text='Print Data',
font=('arial', 20, 'bold'),
bg='gray89',
fg='black',
relief=GROOVE,
width=15,
height=1,
bd=5,
command=printData)
printButton.place(x=865, y=595)
exitButton = Button(root,
text='Exit',
font=('arial', 10, 'bold'),
bg='gray89',
fg='black',
relief=GROOVE,
width=6,
height=1,
bd=5,
command=rootExit)
exitButton.place(x=1212, y=752)
root.mainloop()
答案 0 :(得分:0)
您收到该错误是因为您的打印功能尝试以此格式打开文件。 os中的open函数按顺序接受文件名,模式,缓冲区。这就是你脚本中的内容:
f = open('items.txt', dataDirectory, 'ab+')
您正在传递(文件名,路径,模式)。相反,你应该做这样的事情:
f = open(dataDirectory+'/items.txt', mode='a')
顺便说一下,你的写作方式仍然有误。我建议您阅读os项目的文档及其在Python 3中的使用。转到终端并运行:
import os
help(os)
另外,请阅读此article,它将帮助您将代码从python 2迁移到3,并帮助您发现迁移的潜在问题。在你的情况下特别有趣的段落就是这个:
作为这种二分法的一部分,你还需要小心打开 文件。除非你一直在Windows上工作,否则你有可能 打开二进制文件时,并不总是打扰添加b模式 (例如,rb用于二进制读取)。在Python 3下,二进制文件和文本 文件明显不同,互不相容;看到io 模块详情。因此,你必须决定是否 文件将用于二进制访问(允许读取二进制数据) 和/或书面的)或文本访问(允许读取文本数据) 和/或书面的)。您还应该使用io.open()来打开文件 而不是内置的open()函数,因为io模块是一致的 从Python 2到3,而内置的open()函数不是(在 Python 3它实际上是io.open())。不要打扰过时的 使用codecs.open()的做法,因为这只是保持的必要条件 兼容Python 2.5。
答案 1 :(得分:0)
参数编码必须像这样传递
此代码需要重写为
f.write(bytes('', itemList.get(), 'UTF-8'))
作为
f.write(bytes('', itemList.get(), encoding='UTF-8'))