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()