본문 바로가기

Studying/Python

23. miniProject(13) - french / english word study (feat.tkinter, pandas)

이번에는 영어, 프랑스어 단어를 공부하는 미니프로젝트를 진행해보자.

 

tkinter 을 사용해 프랑스 단어 카드를 보여줄 것이다.

 

3초 안에 단어의 뜻을 떠올려야하고 3초가 지난 후에는 자동으로 화면이 카드가 돌아가 영어로 뜻을 보여줄 것이다. 

 

영어가 나타난 후엔 스스로 정답을 맞췄는지 O, X 버튼을 클릭하여 결과를 기록하고, 우리가 공부해야할 단어들의 목록도 추가로 생성하여 관리할 것이다. 

 

그렇다면 시작해보자. 먼저 가장 기본적인 세팅이다. 

 

 

우리가 이 프로젝트를 시작할 때, 준비해둔 것이 "data / french_words.csv" 파일이다.

 

이 파일에는 우리가 창에 띄울 프랑스 단어와 영어 단어가 쌍을 이어 저장되어 있다. 

( 나중에 단어들이 있는 french_words.csv 말고 words_to_learn.csv 라는 파일을 하나 더 만들 것 )

 

추가로 우리는 빈 listcurrent_cardto_learn 을 만든다. 

 

try 문에는 pandas 를 통해 words_to_learn.csv 파일을 불러와 data 로 저장한다. 

 

그치만 이 상태에선 파일이 준비가 되어 있지 않기에 except 문을 사용한다. 

 

original_data 로 원본 파일인 french_words 파일을 불러오고 이 내용을 to_learn 에 할당할 것이다. 

 

이 떄, pandas.Data.to_dict(orient="{ 변환할 형식} ") 를 사용하는데, orient 에 입력하는 값에 따라 사전 값의 유형이 정해진다. 

 

to_dict() 메소드는 열 이름(column) 을 사전 키로 설정하므로 Dataframe 을 약간 변경해야하는데, 이 때 orient 에 주는 값에 따라 사전의 유형이 달라지는 것이다. 

 

( 자세한 내용은 아래 링크를 참조 )

 

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_dict.html

 

pandas.DataFrame.to_dict — pandas 1.4.3 documentation

Determines the type of the values of the dictionary. Abbreviations are allowed. s indicates series and sp indicates split. New in version 1.4.0: ‘tight’ as an allowed value for the orient argument

pandas.pydata.org

 

이제 우리가 tkinter 에서 사용할 함수에 관해서 작성해보자. 

 

 

크게 3가지 기능이 필요하다. 

 

먼저 버튼을 눌렀을 때, 다음 단어가 적힌 카드를 띄우는 함수가 필요하다. ( def net_card() )

 

먼저 우리가 미리 만들어놓았던 current_card 가 여기서 사용되는데 이 변수는 함수 밖에서 이미 만들어진 것을 그대로 받아와 사용하고 다시 함수 밖으로 돌릴 것이므로 global 로 지정한다. 

 

창에 첫 띄우는 카드는 to_learn 에서 random 으로 choice 해서 불러올 것이고 이는 current_card 에 저장한다. 

 

그리고 각각 card_title, card_word UI 위치에 text 를 설정하고 이에 맞는 영어, 프랑스어 단어를 가져온다. 

 

여기서 중요한 건 3초후에 알아서 카드가 돌면서 영어 뜻이 나와야하는것이기 떄문에 3000ms 후에 flip_card 가 실행되도록 window.after(3000, func=flip_card) 를 해놓고 flip_card 를 만든다. 

 

flip_card 의 내용은 비교적 간단한다. itemconfig 을 통해 배경색을 바꾸고 내부 text 를 변경하면 된다. 

 

is_known 함수는 O 버튼을 누르면 앞으로 배울 단어들을 저장할 to_learn 에서 제거하고 저장하도록 하는 기능을 담을 것이다. 

 

즉, 내가 O 버튼을 누르면 자동적으로 to_learn이 새로 저장되는 것이다. 

 

 

다음은 UI 에 대한 설정이다. 

 

O, X 버튼을 만들고 각각 command 를 연결시키고, 미리 준비해놨던 배경, 그리고 카드들의 위치를 grid 를 통해 잘 배치시킨다. 

 

 

실행 화면