我試圖在python中創建聯繫人應用程序。這是相對簡單的,我不認爲它需要很多解釋。我是嘗試使用pickle模塊來存儲元組列表,這些元組是存儲實際聯繫人信息的主要格式。當程序啓動時,它從保存在泡菜中的地方導入列表phonelist
。我設置它來處理錯誤,因爲這是程序第一次在機器上運行,並且以前從未在所述機器上醃製過phonelist。我對鹹菜知之甚少。這是我第一次使用它。我遇到的這個問題是,第一次運行程序並首次酸洗清單後,我無法對列表進行更改。每次運行程序時,都要更改列表,關閉程序 - 希望通過在程序結尾處清理列表來保存我的更改 - 然後重新打開它,我會得到與列表相同的列表我第一次醃製這份清單。有「重新酸洗」的問題
from tkinter import *
import pickle
try:
phonelist = pickle.load(open("save.p", "rb"))
except FileNotFoundError:
print ("First Run Error")
phonelist = [['name', 'phone no.', 'email']]
pass
def whichSelected() :
return int(select.curselection()[0])
def addEntry() :
phonelist.append ([nameVar.get(), phoneVar.get(), emailVar.get()])
setSelect()
def updateEntry() :
phonelist[whichSelected()] = [nameVar.get(), phoneVar.get(), emailVar.get()]
setSelect()
def deleteEntry() :
del phonelist[whichSelected()]
setSelect()
def loadEntry () :
name, phone, email = phonelist[whichSelected()]
nameVar.set(name)
phoneVar.set(phone)
emailVar.set(email)
def makeWindow() :
global nameVar, phoneVar, emailVar, select
win = Tk()
frame1 = Frame(win)
frame1.pack()
Label(frame1, text="Name").grid(row=0, column=0, sticky=W)
nameVar = StringVar()
name = Entry(frame1, textvariable=nameVar)
name.grid(row=0, column=1, sticky=W)
Label(frame1, text="Phone").grid(row=1, column=0, sticky=W)
phoneVar= StringVar()
phone= Entry(frame1, textvariable=phoneVar)
phone.grid(row=1, column=1, sticky=W)
Label(frame1, text="Email").grid(row=2, column=0, sticky=W)
emailVar= StringVar()
email= Entry(frame1, textvariable=emailVar)
email.grid(row=2, column=1, sticky=W)
frame2 = Frame(win) # Row of buttons
frame2.pack()
b1 = Button(frame2,text=" Add ",command=addEntry)
b2 = Button(frame2,text="Update",command=updateEntry)
b3 = Button(frame2,text="Delete",command=deleteEntry)
b4 = Button(frame2,text=" Load ",command=loadEntry)
b1.pack(side=LEFT); b2.pack(side=LEFT)
b3.pack(side=LEFT); b4.pack(side=LEFT)
frame3 = Frame(win) # select of names
frame3.pack()
scroll = Scrollbar(frame3, orient=VERTICAL)
select = Listbox(frame3, yscrollcommand=scroll.set, height=6)
scroll.config (command=select.yview)
scroll.pack(side=RIGHT, fill=Y)
select.pack(side=LEFT, fill=BOTH, expand=1)
return win
def setSelect() :
phonelist.sort()
select.delete(0,END)
for name,phone,email in phonelist :
select.insert (END, name)
pickle.dump(phonelist, open("save.p", "wb"))
win = makeWindow()
setSelect()
win.mainloop()
最好的辦法是使用不同的格式來存儲數據;泡菜很糟糕。 – geoffspear
雖然存儲格式與他的問題無關。 –
我正在考慮它。這是迄今爲止我發現的最簡單的方法,所以我希望能夠讓它工作。 – wjjd225