iT邦幫忙

0

剛學Python、Tkinter Demo,懇請指導

目的:藉由學號輸入框索引,比對CSV刪除資料,
如沒有就顯示輸入學號錯誤,請重新輸入。
問題一、按下刪除鈕刪除學號"111",CSV內的學號 "111"是有的,但是直接跳過直接顯示輸入 錯誤。
問題二、結束程式後,
每次都會再次儲存writeR.writerow(["學號","姓名","國文","英文","數學"]),
下次新增時,有別的方式檢查,假如有的話就不再疊加嗎?
https://ithelp.ithome.com.tw/upload/images/20210502/20116920kkNzJNY7DP.png
https://ithelp.ithome.com.tw/upload/images/20210502/20116920Q7DHoK6jAi.png

import tkinter as tk
import tkinter.messagebox
import csv

#新增
def _hit2():
    itemList = [enTry1.get(),enTry2.get(),enTry3.get(),enTry4.get(),enTry5.get()]
    pttList.append(itemList)   
    enTry1.delete(0,tk.END)
    enTry2.delete(0,tk.END)
    enTry3.delete(0,tk.END)
    enTry4.delete(0,tk.END)
    enTry5.delete(0,tk.END)
    enTry1.focus()
    enTry2.focus()
    enTry3.focus()
    enTry4.focus()
    enTry5.focus()
#檢視    
def _hit3():
    csvFile = open("abc.csv","r",newline="",encoding="utf-8-sig")
    listFile=csv.reader(csvFile)
    for iteM in listFile:
        lb.insert(tk.END,iteM)             
    csvFile.close()
#刪除
def _hit4():
    if enTry1.get() in pttList: 
        del pttList[enTry1.get()]     
        tk.messagebox.askokcancel("提示", "确定删除"+enTry1.get()+"吗?")
        enTry1.delete(0,tk.END)
    else:
        tk.messagebox.showerror("錯誤", "你的學號錯誤,請重新输入!?")
        enTry1.delete(0,tk.END)
#儲存 CSV 資料
def _hit5():   
    csvFile = open("abc.csv","a",newline="",encoding="utf-8-sig")
    writeR=csv.writer(csvFile)
    writeR.writerow(["學號","姓名","國文","英文","數學"])
    writeR.writerows(pttList)
    csvFile.close()
    qQ=tk.messagebox.askokcancel("提示","確定要結束程式嗎???")
    if qQ:
        wiN.destroy()    
#介面設定
wiN = tk.Tk()
wiN.title("學校成績系統[測試版]!!!")
wiN.geometry("550x700+500+50")
wiN.resizable(width=False, height=False)

titlE=tk.Label(wiN,text="學校成績系統",font=('Arial',35),width=15,height=1) 
titlE.place(x=70,y=15)
#標籤、輸入框設置
global enTry1,enTry2,enTry3,enTry4,enTry5
namE1=tk.Label(wiN,text="學號",font=('Arial',15),bg="yellow",fg="black") 
namE1.place(x=100,y=80)
enTry1 = tk.Entry(wiN,font=('Arial',10),bg="Aqua",width=35,bd=4)
enTry1.place(x=150,y=80)

namE2=tk.Label(wiN,text="姓名",font=('Arial',15),bg="yellow",fg="black")
namE2.place(x=100,y=120)
enTry2 = tk.Entry(wiN,font=('Arial',10),bg="Aqua",width=35,bd=4)
enTry2.place(x=150,y=120)

namE3=tk.Label(wiN,text="國文",font=('Arial',15),bg="yellow",fg="black")
namE3.place(x=100,y=160) 
enTry3 = tk.Entry(wiN,font=('Arial',10),bg="Aqua",width=35,bd=4)
enTry3.place(x=150,y=160)

namE4=tk.Label(wiN,text="英文",font=('Arial',15),bg="yellow",fg="black") 
namE4.place(x=100,y=200)
enTry4 = tk.Entry(wiN,font=('Arial',10),bg="Aqua",width=35,bd=4)
enTry4.place(x=150,y=200)

namE5=tk.Label(wiN,text="數學",font=('Arial',15),bg="yellow",fg="black")  
namE5.place(x=100,y=240)
enTry5 = tk.Entry(wiN,font=('Arial',10),bg="Aqua",width=35,bd=4)
enTry5.place(x=150,y=240)
#按鈕設置
global btn1,btn2,btn3,btn4,btn5,lb
btn1 = tk.Button(wiN, text="開啟", font=("Arial", 10), width=5, height=1,fg="black")
btn2 = tk.Button(wiN, text="新增", font=("Arial", 10), width=5, height=1,command=lambda:_hit2(),fg="black")
btn3 = tk.Button(wiN, text="檢視", font=("Arial", 10), width=5, height=1,command=_hit3,fg="black")
btn4 = tk.Button(wiN, text="刪除", font=("Arial", 10), width=5, height=1,command=lambda:_hit4(),fg="black")
btn5 = tk.Button(wiN, text="結束", font=("Arial", 10), width=5, height=1,command=_hit5,fg="black")
btn1.place(x=100,y=280)
btn2.place(x=170,y=280)
btn3.place(x=240,y=280)
btn4.place(x=310,y=280)
btn5.place(x=380,y=280)
#清單設置
sBar=tk.Scrollbar(wiN)
sBar.pack(side=tk.RIGHT,fill=tk.Y)
lb=tk.Listbox(wiN, font=("Arial", 20),yscrollcommand=sBar.set,bg="yellow",width=30)
lb.place(x=50,y=320)
sBar.config(command=lb.yview)

pttList=[]
  
wiN.mainloop()
看更多先前的討論...收起先前的討論...
先把程式碼貼好, Python 是縮排的, 你不把程式碼貼好,別人還要排版調很久.
至於怎樣貼程式碼......
https://ithelp.ithome.com.tw/questions/10203155
1092B0007 iT邦新手 4 級 ‧ 2021-05-02 12:26:17 檢舉
用 ` 程式碼 ` 把程式碼包起來才比較好看清楚
p5678481 iT邦新手 5 級 ‧ 2021-05-02 13:12:48 檢舉
了解了 ,感謝兩位
建議你先把 簡單的功能 例如 簡單的新增, 先做好.
接著再加上 查詢 或是 檢視, 一次加一個功能, 然後做 刪除的功能,
另外記得要做關檔. 你的csv 檔案似乎都已經很亂了.
要不要先做 文字介面的 csv 的,先把csv 的處理掌握好.
p5678481 iT邦新手 5 級 ‧ 2021-05-02 18:24:45 檢舉
@一級屠豬士
你的意思是新增=>查詢/檢視=>刪除=>結束。??
franx0722 iT邦新手 5 級 ‧ 2021-05-03 17:05:12 檢舉
你的操作順序是? 按下刪除鈕刪除學號"111" 這樣而已嗎 ?
不是要先讀取檔案先讓pttList 有資料之後按刪除才有比對資料
以上我不懂python 我只懂C語言 在程式中沒看到有預讀資料的功能
在應用程式開起來時先預讀檔案內容 之後在照你的順序走也是可以 或可以考慮用SQL
p5678481 iT邦新手 5 級 ‧ 2021-05-04 18:30:04 檢舉
原來我沒有預讀就刪除難怪我檔案會直接跳過,我再試試,謝謝你^^

尚未有邦友回答

立即登入回答