본문 바로가기
프로그램/Python 1000제

Python 325제] 두근두근 파이썬(개정판) CHAPTER 11 연습문제 7 p361

by 건티 2024. 10. 19.
728x90

출처 : 반크_독도2023

 

참고풀이]

import pickle
from tkinter import *
from tkinter import messagebox

phone_book={}
pb=[]
cnt=0
name=""
phone=""

#파일저장
def Save():
    outFile=open("phone_book.dat","wb")
    pickle.dump(phone_book, outFile)
    outFile.close()
    messagebox.showinfo("SaveFile","이름과 전화번호가 저장되었습니다.")

#Clean
def Clean():
    ent1.delete(0,END)
    ent2.delete(0,END)
    ent1.focus()
    
#선택자료 출력
def Print():
    global pb, cnt
    Clean()
    ent1.insert(0, pb[cnt])
    ent2.insert(0, phone_book[pb[cnt]])
   
#추가
def Add():
    global phone_book
    phone_book[ent1.get()]=ent2.get()
    messagebox.showinfo("AddSave",phone_book)
    Save()
    Clean()

#처음
def First():
    global pb, cnt
    cnt=0
    pb=list(phone_book) #딕셔너리를 리스트로 변환
    Print()

#다음
def Next():
    global pb, cnt
    cnt+=1
    pb=list(phone_book) #딕셔너리를 리스트로 변환
    if cnt == len(pb):
        messagebox.showinfo("ErrorMessage","더 이상 자료가 없습니다.")
        cnt=len(pb)-1
    else:
        Print()

#이전
def Before():
    global pb, cnt
    cnt-=1
    pb=list(phone_book) #딕셔너리를 리스트로 변환
    if cnt < 0:
        messagebox.showinfo("ErrorMessage","더 이상 자료가 없습니다.")
        cnt=0
    else:
        Print()

#마지막
def Last():
    global pb, cnt
    pb=list(phone_book) #딕셔너리를 리스트로 변환
    cnt=len(pb)-1
    Print()

#파일 읽기
def FileLoad():
    global phone_book
    inFile=open("phone_book.dat","rb")
    phone_book=pickle.load(inFile)
    #messagebox.showinfo("LoadFile",phone_book)
    inFile.close()
    messagebox.showinfo("LoadFile","이름과 전화번호를 읽어왔습니다.")

#끝내기, 추가함.
def WinEnd():
    win.destroy()

#main 부분
win=Tk()
#작업창의 크기와 위치를 정한다.
win.geometry("490x120+600+400")
#작업창의 크기조절을 할 수 없도록 한다.
win.resizable(0,0)

#Label, Entry, Button등을 창에 배치한다.
lbl1=Label(win, text="이      름", width=10, font=("굴림",15))
ent1=Entry(win, width=28, font=("굴림",15)) #이름
lbl2=Label(win, text="전화번호", width=10, font=("굴림",15))
ent2=Entry(win, width=28, font=("굴림",15)) #전화번호

lbl1.grid(row=0, column=0, pady=10, columnspan=3)
ent1.grid(row=0, column=3, padx=10,columnspan=5)
lbl2.grid(row=1, column=0, columnspan=3)
ent2.grid(row=1, column=3, padx=10,columnspan=5)

lbl3=Label(win, text=" ", width=1)
btn1=Button(win, text="추가저장", width=7, font=("굴림",11,"bold"), command=Add)
btn2=Button(win, text="처음", width=6, font=("굴림",11,"bold"), command=First)
btn3=Button(win, text="다음", width=6, font=("굴림",11,"bold"), command=Next)
btn4=Button(win, text="이전", width=6, font=("굴림",11,"bold"), command=Before)
btn5=Button(win, text="마지막", width=6, font=("굴림",11,"bold"), command=Last)
btn6=Button(win, text="파일읽기", width=7, font=("굴림",11,"bold"), command=FileLoad)
btn7=Button(win, text="닫기", width=6, font=("굴림",11,"bold"), command=WinEnd)

lbl3.grid(row=2, column=0)
btn1.grid(row=2, column=1, pady=10)
btn2.grid(row=2, column=2, pady=5)
btn3.grid(row=2, column=3, pady=5)
btn4.grid(row=2, column=4, pady=5)
btn5.grid(row=2, column=5, pady=5)
btn6.grid(row=2, column=6, pady=5)
btn7.grid(row=2, column=7, pady=5)

win.mainloop()

 

참고풀이 결과]

시작화면)

 

 

 

 

대한민국의 아름다운 영토, 독도의 여름

 

반응형

댓글