영어단어학습기 코드(python)

김회곤·2022년 6월 20일
0

대학교과제

목록 보기
1/5
post-thumbnail




from tkinter import *
import threading
import random
import os
import sys
from time import *
from turtle import *
import pandas as pd
from pandas import DataFrame as df

screen = Screen()
screen.setup(0, 0)
screen.tracer(0)

s = int(textinput("영단어 학습기", "필요한 분야를 고르시오.\n\n1. BASIC VOCA \n2. 무역단어"
                  +"  3. 보안약어\n4. 건축단어  5. 통계단어\n"))

default = 'basicvoca'
if s == 1:
    wb = pd.read_excel('./dic.xlsx', sheet_name = default)
elif s == 2:
    wb = pd.read_excel('./dic.xlsx', sheet_name = 'trade_word')
elif s == 3:
    wb = pd.read_excel('./dic.xlsx', sheet_name = 'security_initial')
elif s ==4:
    wb = pd.read_excel('./dic.xlsx', sheet_name = 'architecture_word')
elif s ==5:
    wb = pd.read_excel('./dic.xlsx', sheet_name = 'statistics_word')
else:
    wb = pd.read_excel('./dic.xlsx', sheet_name = default)

eng = []
kor = []
i = 0
while ( i < len( wb['단어'] ) ):
    eng.append(wb['단어'][i])
    i += 1
i = 0
while ( i < len( wb['뜻'] ) ):
    kor.append(wb['뜻'][i])
    i += 1
kn = len(kor)

KorE = 0
if s != 3:
    KorE = int(textinput("ʚ영단어 학습기ɞ", "학습할 것을 고르시오\n1. 스펠링 2. 뜻"))
bye()



def GUI():
    global KorE, init
    
    if KorE == 1:
        wtxt1 = "한글"
        wtxt2 = "영어"
        
        exdata = []
        
        for i in range(kn):
            tmp = []
            for j in range(1):
                tmp.append(kor[i])
                tmp.append(eng[i])
            exdata.append(tmp)
            i += 1
        data = random.sample(exdata, 10)
    elif KorE == 2:
        wtxt1 = "영어"
        wtxt2 = "한글"

        exdata = []
        for i in range(kn):
            tmp = []
            for j in range(1):
                tmp.append(eng[i])
                tmp.append(kor[i])
            exdata.append(tmp)
            i += 1
        data = random.sample(exdata, 10)
    
    if s == 3:
        wtxt1 = "약어"
        wtxt2 = "스펠링"
        
        exdata = []
        
        for i in range(kn):
            tmp = []
            for j in range(1):
                tmp.append(eng[i])
                tmp.append(kor[i])
            exdata.append(tmp)
            i += 1
        data = random.sample(exdata, 10)

    
    root = Tk()
    root.title("ʚ영단어 학습기ɞ")
    is_Blind = False #영작이 아닌 상태가 초기값
    n = 0
    et = 0
    start = 0

    ######################################################

    sWord = str(data[n][0])
    tWord = str(data[n][1])

    def centerWindow():
        w = 355
        h = 280

        sw = root.winfo_screenwidth()
        sh = root.winfo_screenheight()

        x = (sw - 400)/2
        y = (sh - 400)/2
        root.geometry('%dx%d+%d+%d' % (w, h, x, y))

    def Typing():
        global n, is_Blind, et, start
        
        if wtxt1 == "한글":
            root.title("ʚ단어 스펠링 타자 연습ɞ")
        else:
            root.title("ʚ단어 뜻 타자 연습ɞ")
        n = 0
        is_Blind = False
        userIO.delete(0, END)
        sourceword.config(text=sWord, foreground="black")
        targetword.config(text=tWord, foreground="black")
        s1.config(text="경과 시간")
        s2.config(text="")
        s3.config(text="")
        start = time()

    def Blind():
        global n, is_Blind, et, start
        root.title("ʚ영작 연습ɞ")
        n = 0
        is_Blind = True
        userIO.delete(0, END)
        sourceword.config(text=sWord, foreground="black")
        targetword.config(text=" ", foreground="black")
        s1.config(text="경과 시간")
        s2.config(text="")
        s3.config(text="")
        start = time()

    def Lists():
        dfList=df(data,columns=["한글","영어"])
        display(dfList)
        #print(dfList)
        s3.config(text="")

    def Reload():
        root.destroy()
        threading.Timer(2, GUI).start()

    #########################################################

    def Exam(): #시험 
        global n, s
        exam = Tk()
        exam.title("ʚ단어 시험ɞ")
        ew = exam.winfo_screenwidth()
        eh = exam.winfo_screenheight()
        x = (ew - 400) / 2
        y = (eh - 300) / 2
        exam.geometry('%dx%d+%d+%d' % (410, 150, x, y))
        
        s = 0
        n = 0
        sourceword.config(text="")
        targetword.config(text="")
        s3.config(text="")
        sWord = str(data[n][0])
        strLen = str(len(data))
        
        lv = Label(exam, text=str(n+1)+"번", width=7, bg='white')
        lv.grid(row=0, column=0)
        entire = Label(exam, text="총 문항 : "+strLen, bg='white')
        entire.grid(row=0, column=3)
        score = Label(exam, text="점수 : "+str(s), bg='white')
        score.grid(row=2, column=3)
        
        word = Label(exam, text=sWord, height=3, font='Inconsolata-g 16 italic', bg='white')
        word.grid(row=1, column=2)
        pInput = Entry(exam, width=35, justify=CENTER, font=30)
        pInput.grid(row=2, column=2)
        pInput.focus_set()

        start = time()
        def type(self):
            global n, s
            
            if n < len(data)-1:
                if data[n][1] == pInput.get():
                    pInput.delete(0, END)
                    n += 1
                    s += 1
                    word.config(text=str(data[n][0]))
                    lv.config(text=str(n+1)+"번")
                    score.config(text="점수 : "+str(s))
                else:
                    pInput.delete(0, END)
                    n += 1
                    word.config(text=str(data[n][0]))
                    lv.config(text=str(n+1)+"번")
                    score.config(text="점수 : "+str(s))
            elif n == len(data)-1:
                n += 1
                if data[n-1][1] == pInput.get():
                    s += 1
                    pInput.delete(0, END)
                    word.config(text="시험 종료.")
                    score.config(text="점수 : "+str(s))
                    exam.after(3000, exam.destroy)

                    end = time()
                    et = end - start
                    et = format(et, " .2f")
                    
                    word.config(text="시험 점수는 "+str(score*10)+"입니다.")
                    targetword.config(text="수고하셨습니다!!")
                    s3.config(text="시험 시간 : "+str(et)+"초")
                else:
                    pInput.delete(0, END)
                    word.config(text="시험 종료.")
                    score.config(text="점수 : "+str(s))
                    exam.after(3000, exam.destroy)

                    end = time()
                    et = end - start
                    et = format(et, " .2f")
                    targetword.config(text="수고하셨습니다!!")
                    s3.config(text="시험 시간 : "+str(et)+"초")
        
        def ESC(event):
            exam.destroy()
        
        exam.bind('<Escape>', ESC)
        exam.bind('<Return>', type)
        exam['bg'] = 'white'
        exam.mainloop()

    ############################################################

    centerWindow()
    BTN_COLOR = 'white'
    
    typring= Button(root, text="타자", width=8, height=1,
                    bd=4, bg=BTN_COLOR, command=Typing,borderwidth=2, relief="raise")
    typring.grid(row=0, column=0)
    blind = Button(root, text="영작", width=8, height=1,
                   bd=4, bg=BTN_COLOR, command=Blind,borderwidth=2, relief="raise")
    blind.grid(row=0, column=1)
    wordlist= Button(root, text="리스트", width=8, height=1,
                     bd=4, bg=BTN_COLOR, command=Lists,borderwidth=2, relief="raise")
    wordlist.grid(row=0, column=2)
    test = Button(root, text=" 시험 ", width=8, height=1,
                  bd=4, bg=BTN_COLOR, command=Exam,borderwidth=2, relief="raise")
    test.grid(row=0, column=3)
    change = Button(root, text="새단어", width=8, height=1,
                    bd=4, bg=BTN_COLOR, command=Reload,borderwidth=2, relief="raise")
    change.grid(row=0, column=4)

    w = Label(root, text=wtxt1, width=9, height=5, bg="#00e0ff",borderwidth=2, relief="ridge")
    w.grid(row=1, column=0)
    sourceword = Label(root, text="", font='Inconsolata-g 12 bold', width=28,
                       height=4, fg = "MediumPurple4", bg = "aquamarine", relief="ridge")
    sourceword.grid(row=1, column=1, columnspan=4)
    
    w = Label(root, text=wtxt2, width=9, height=5, bg="cyan",borderwidth=2, relief="ridge")
    w.grid(row=2, column=0)
    targetword = Label(root, text="", font='Inconsolata-g 12 bold', width=28,
                       height=4, fg = "plum4", bg = "#a6fff2", relief="ridge")
    targetword.grid(row=2, column=1, columnspan=4)

    w = Label(root, text="입력", width=9, height=2, bg="#74f9ff",borderwidth=2, relief="ridge",
              highlightcolor="#9695E4",highlightbackground="#9695E4")
    w.grid(row=3, column=0)
    
    userIO = Entry(root, width=25, justify=CENTER, font=50)
    userIO.grid(row=3, column=1, columnspan=4)

    s1 = Label(root, text="경과시간 :", width=9, height=2, bg='white', anchor="ne")
    s1.grid(row=4, column=3)
    
    s2 = Label(root, text="", width=9, height=2, bg='white', anchor="n")
    s2.grid(row=4, column=4)

    s3 = Label(root, text="", width=15, height=2, bg='white', anchor="n", font=1)
    s3.grid(row=5, column=3, columnspan=2)

    userIO.focus_set()

    #######################################################

    def type(self): #엔터 동작
        global n, is_Blind, et, start
        
        if is_Blind == False and n < len(data)-1: #영작 상태X, 데이터가 남음 
            if data[n][1] == userIO.get(): #정답
                userIO.delete(0, END)
                n += 1
                sourceword.config(text=str(data[n][0]), foreground="black")
                targetword.config(text=str(data[n][1]), foreground="black")
            else: #오답
                userIO.delete(0, END)
                userIO.insert(0, "다시 시도!")
                userIO.select_to(6)
        elif is_Blind == False and n == len(data)-1:
            n += 1
            if data[n-1][1] == userIO.get():
                userIO.delete(0, END)
                sourceword.config(text="ɞɞɞɞFinishʚʚʚʚ", foreground="black")
                targetword.config(text=" ")
            else:
                userIO.delete(0, END)
        elif is_Blind == False and n == len(data):
            if data[n-1][1] == userIO.get():
                userIO.delete(0, END)
                sourceword.config(text="ɞɞɞɞFinishʚʚʚʚ", foreground="black")
                targetword.config(text=" ")
            else:
                userIO.delete(0, END)
        
        if is_Blind == True and n < len(data)-1: #영작 상태O, 데이터가 남음
            if data[n][1] == userIO.get(): #정답
                userIO.delete(0, END)
                n += 1
                sourceword.config(text=str(data[n][0]))
                targetword.config(text=" ")
            else: #오답
                userIO.delete(0, END)
                targetword.config(text="다시 시도!", foreground="black")
                
        elif is_Blind == True and n == len(data)-1:
            n += 1
            if data[n-1][1] == userIO.get(): #정답
                targetword.config(text=" ")
                userIO.delete(0, END)
                sourceword.config(text="ɞɞɞɞFinishʚʚʚʚ", foreground="black")
            else: #오답
                userIO.delete(0, END)
                targetword.config(text="다시 시도!")
                
        elif is_Blind == True and n == len(data):
            if data[n-1][1] == userIO.get(): #정답
                userIO.delete(0, END)
                sourceword.config(text="ɞɞɞɞFinishʚʚʚʚ", foreground="black")
                targetword.config(text=" ")
            else: #오답
                userIO.delete(0, END)
                targetword.config(text="다시 시도!")
        
        if n < len(data)-1:
            end = time()
            et = end - start
            et = format(et, " .2f")
            s2.configure(text=et + "초")
            et += et
        elif n == len(data)-1:
            end = time()
            et = end - start
            et = format(et, " .2f")
            s2.configure(text=et + "초")
        elif n == len(data):
            end = time()
            et = end - start
            et = format(et, " .2f")
            s2.configure(text=et + "초")
            et = 0

    def ESC(event):
        root.destroy()

    root.bind('<Escape>', ESC)
    root.bind('<Return>', type)
    root['bg'] = 'white'
    root.mainloop()

threading.Timer(2, GUI).start()

profile
전공 : 빅데이터통계학과, 부전공 : 인공지능 소프트웨어

0개의 댓글