2019-09-02 11:26:04 +02:00
from tkinter import *
from tkinter import filedialog
from tkinter import messagebox
import random
def swapSides ( ) :
global test
temp = test [ 2 ]
test [ 2 ] = test [ 3 ]
test [ 3 ] = temp
newQuestion ( )
def saveTest ( ) :
print ( test )
with open ( filepath , mode = ' w ' ) as file :
file . write ( test [ 0 ] + ' / ' + test [ 1 ] )
file . write ( str ( test [ 4 ] ) + ' \n ' )
for i in range ( len ( test [ 2 ] ) ) :
for j in range ( len ( test [ 2 ] [ i ] ) ) :
file . write ( test [ 2 ] [ i ] [ j ] )
if j < len ( test [ 2 ] [ i ] ) - 1 :
file . write ( ' , ' )
file . write ( ' / ' )
for j in range ( len ( test [ 3 ] [ i ] ) ) :
file . write ( test [ 3 ] [ i ] [ j ] )
if j < len ( test [ 3 ] [ i ] ) - 1 :
file . write ( ' , ' )
file . write ( ' \n ' )
def newQuestion ( ) :
global questionPlace
questionPlace = random . randint ( 0 , len ( test [ 2 ] ) - 1 )
newQuestion = test [ 2 ] [ questionPlace ] [ 0 ]
question . set ( newQuestion )
def on_closing ( ) :
if messagebox . askokcancel ( " Quit " , " Do you want to quit? " ) :
saveTest ( )
root . destroy ( )
def submitAnswer ( uselessArgument ) :
global score
if answerEntry . get ( ) . lower ( ) in test [ 3 ] [ questionPlace ] :
score + = 1
currentScore . set ( ' Score: %s ' % ( score ) )
else :
score = 0
currentScore . set ( ' Score: %s ' % ( score ) )
if score > test [ 4 ] :
test [ 4 ] = score
highScore . set ( ' High score: %d ' % ( test [ 4 ] ) )
answerEntry . delete ( 0 , ' end ' )
newQuestion ( )
def formatTest ( filepath ) :
global score
with open ( filepath ) as file :
file = file . readlines ( )
nazev1 = file [ 0 ] . split ( ' / ' ) [ 0 ]
nazev2 = file [ 0 ] . split ( ' / ' ) [ 1 ]
sloupec1 = [ ]
sloupec2 = [ ]
highScore = int ( file [ 1 ] . strip ( ' \n ' ) )
score = 0
for line in file [ 2 : ] :
currentline = line . strip ( ' \n ' )
currentline = currentline . split ( ' / ' )
sloupec1 . append ( currentline [ 0 ] . split ( ' , ' ) )
sloupec2 . append ( currentline [ 1 ] . split ( ' , ' ) )
return nazev1 , nazev2 , sloupec1 , sloupec2 , highScore
def getExtension ( filename ) : # returns the last four characters in a filename as a string
return filename [ - 4 : None ]
def openTest ( ) :
global test
global filepath
saveTest ( )
gotfile = False
filepath = None
while not gotfile :
filepath = filedialog . askopenfilename ( title = ' Select test file ' )
if getExtension ( filepath ) == ' .tst ' :
gotfile = True
else :
messagebox . showinfo ( " ERROR: unrecognized file " , " We are sorry but files with the ' %s ' appendix are not supported, we support only ' .tst ' files. " % ( getExtension ( filepath ) ) )
test = list ( formatTest ( filepath ) )
newQuestion ( )
currentScore . set ( ' Score: %s ' % score )
highScore . set ( ' High score: %d ' % test [ 4 ] )
def makeMenu ( root ) :
menu = Menu ( root )
root . config ( menu = menu )
menu . add_command ( label = ' Open ' , command = openTest )
menu . add_command ( label = ' Switch sides ' , command = swapSides )
return menu
def makeRoot ( ) :
root = Tk ( )
root . geometry ( ' 500x400 ' )
root . title ( ' Test Me ' )
root . configure ( bg = " gray " )
return root
root = makeRoot ( )
filepath = ' programfiles/default.tst '
test = list ( formatTest ( ' programfiles/default.tst ' ) )
questionPlace = 0
score = 0
currentScore = StringVar ( )
highScore = StringVar ( )
question = StringVar ( )
timeMultiplier = StringVar ( )
anotherSpacingLabel = Label ( bg = ' gray ' , padx = 5 )
currentScoreLabel = Label ( root , textvariable = currentScore , bg = ' gray ' )
highScoreLabel = Label ( root , textvariable = highScore , bg = ' gray ' )
questionLabel = Label ( root , textvariable = question , width = 30 )
spacingLabel = Label ( bg = ' gray ' , padx = 10 )
answerEntry = Entry ( root , width = 30 )
answerButton = Button ( root , text = ' submit ' , command = submitAnswer )
timeMultiplierLabel = Label ( root , textvariable = timeMultiplier , bg = ' gray ' )
anotherSpacingLabel . grid ( row = 0 , column = 0 )
currentScoreLabel . grid ( row = 0 , column = 1 , columnspan = 2 , sticky = W )
highScoreLabel . grid ( row = 0 , column = 4 , columnspan = 2 , sticky = E )
questionLabel . grid ( row = 1 , column = 2 , sticky = W )
spacingLabel . grid ( row = 1 , column = 3 )
answerEntry . grid ( row = 1 , column = 4 , sticky = E )
answerButton . grid ( row = 1 , column = 5 , sticky = W )
2019-09-02 11:35:15 +02:00
#timeMultiplierLabel.grid(row=2, column=1, columnspan=5)
2019-09-02 11:26:04 +02:00
currentScore . set ( ' Score: %s ' % ( score ) )
highScore . set ( ' High score: %d ' % ( test [ 4 ] ) )
question . set ( ' question will appear here ' )
timeMultiplier . set ( ' Time multiplier is: 0 ' )
root . protocol ( " WM_DELETE_WINDOW " , on_closing )
answerEntry . bind ( ' <Return> ' , submitAnswer )
menu = makeMenu ( root )
root . mainloop ( )