TrollerBlader

qt001.py

Mar 12th, 2014
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 10.49 KB | None | 0 0
  1. from Tkinter import *
  2. from time import sleep
  3. import random, linecache, winsound, tkMessageBox
  4.  
  5. class QuizGUI:
  6.     def __init__(self, parent):
  7.         ### Make parent remember itself:
  8.         self.myParent = parent
  9.  
  10.         self.initialize()
  11.  
  12.     def nextQuestion(self):
  13.         if (self.questionNum+6) >= self.numberOfLines:
  14.             pass
  15.         else:
  16.             self.questionNum += 6
  17.         print "Question: %s"% self.questionNum
  18.         self.updateDisplay()
  19.  
  20.     def previousQuestion(self):
  21.         if self.questionNum > 1:
  22.             self.questionNum -= 6
  23.         if self.questionNum <= 1:
  24.             self.questionNum = 1
  25.         print "Question: %s"% self.questionNum
  26.         self.updateDisplay()
  27.  
  28.     def addQuestion(self):
  29.         self.boolAdd = TRUE
  30.         ### Unlock the entry boxes, lock "NEXT", "PREVIOUS", "EDIT":
  31.         self.bEdit["state"] = "disabled"
  32.         self.bNext["state"] = "disabled"
  33.         self.bPrev["state"] = "disabled"
  34.         for self.each in self.eAnswerChoices:
  35.             self.each["state"] = "normal"
  36.             self.each.delete(0,END)
  37.         self.eQuestion["state"] = "normal"
  38.         self.eQuestion.delete(0, END)
  39.         for self.each in self.rAnswerChoices:
  40.             self.each["state"] = "normal"
  41.  
  42.     def editQuestion(self):
  43.         self.boolEdit = TRUE
  44.         ### Unlock the entry boxes, lock "NEXT", "PREVIOUS", "ADD NEW":
  45.         self.bAdd["state"]  = "disabled"
  46.         self.bNext["state"] = "disabled"
  47.         self.bPrev["state"] = "disabled"
  48.         for self.each in self.eAnswerChoices:
  49.             self.each["state"] = "normal"
  50.         self.eQuestion["state"] = "normal"
  51.         for self.each in self.rAnswerChoices:
  52.             self.each["state"] = "normal"
  53.  
  54.     def deleteQuestion(self):
  55.         ### Read the question num, and delete from questionNum to it's correctAnswer
  56.         del self.quizList[self.questionNum-1:self.questionNum+5]
  57.  
  58.         self.rewriteInformation()
  59.        
  60.         tkMessageBox.showinfo("Question Deleted", "Question has been deleted;\nRestart the program to see changes")
  61.  
  62.     def saveQuestion(self):
  63.         ### Save all the visible information:
  64.         self.numberOfLines = 0
  65.        
  66.         if self.rVariable.get() == 0:
  67.             self.correctAnswer = "A"
  68.         if self.rVariable.get() == 1:
  69.             self.correctAnswer = "B"
  70.         if self.rVariable.get() == 2:
  71.             self.correctAnswer = "C"
  72.         if self.rVariable.get() == 3:
  73.             self.correctAnswer = "D"
  74.  
  75.         print self.correctAnswer
  76.  
  77.         if self.boolEdit == TRUE:
  78.             ### Now, go to <quesitonNumber> in the <quizFile[questionNum]>, and rewrite!
  79.             self.quizList[self.questionNum-1]   = self.eQuestion.get()
  80.             self.quizList[self.questionNum]     = self.eAnswerChoiceA.get()
  81.             self.quizList[self.questionNum+1]   = self.eAnswerChoiceB.get()
  82.             self.quizList[self.questionNum+2]   = self.eAnswerChoiceC.get()
  83.             self.quizList[self.questionNum+3]   = self.eAnswerChoiceD.get()
  84.             self.quizList[self.questionNum+4]   = self.correctAnswer
  85.         if self.boolAdd == TRUE:
  86.             self.quizList.append(self.eQuestion.get())
  87.             self.quizList.append(self.eAnswerChoiceA.get())
  88.             self.quizList.append(self.eAnswerChoiceB.get())
  89.             self.quizList.append(self.eAnswerChoiceC.get())
  90.             self.quizList.append(self.eAnswerChoiceD.get())
  91.             self.quizList.append(self.correctAnswer)
  92.  
  93.         self.rewriteInformation()
  94.         self.updateDisplay()
  95.  
  96.         tkMessageBox.showinfo("Question Updated", "Infomation has been updated; \nRestart the program to see changes.")
  97.         print "MESSAGEBOX SHOWN!!!!"
  98.         self.updateDisplay()
  99.  
  100.     def rewriteInformation(self):
  101.         self.quizList2 = []
  102.         for self.each in self.quizList:
  103.             self.item = (self.each + "\n")
  104.             self.quizList2.append(self.item)
  105.  
  106.         #Rewrite the quiz file!
  107.         self.quizFile = open(self.quizLoc, 'w')
  108.         for each in self.quizList2:
  109.             self.quizFile.write(each)
  110.         self.quizFile.flush()
  111.         self.quizFile.close()
  112.  
  113.         print self.quizList2
  114.  
  115.     def getInformation(self):
  116.         # Read the quiz file!
  117.         self.quizLoc = "qtquest.dat"
  118.         self.quizFile = open(self.quizLoc, 'r')
  119.         self.quizList = []
  120.  
  121.         for line in self.quizFile:
  122.             item = line.rstrip("\n")
  123.             self.quizList.append(item)
  124.             self.numberOfLines+=1
  125.  
  126.         self.quizFile.close()
  127.  
  128.     def updateDisplay(self):
  129.         print "UpdateDisplay's self.quizList: %s" %self.quizList
  130.  
  131.         ### GET the question, answers and correct answer from the file using linecache, and the question number:
  132.         self.questionText = str(linecache.getline(self.quizLoc, self.questionNum)).rstrip()     #Remove all whitespace to the right of the question, and force it to be a string.
  133.         self.answerAText  = str(linecache.getline(self.quizLoc, self.questionNum+1)).rstrip()
  134.         self.answerBText  = str(linecache.getline(self.quizLoc, self.questionNum+2)).rstrip()
  135.         self.answerCText  = str(linecache.getline(self.quizLoc, self.questionNum+3)).rstrip()
  136.         self.answerDText  = str(linecache.getline(self.quizLoc, self.questionNum+4)).rstrip()
  137.         self.correctAnswer= str(linecache.getline(self.quizLoc, self.questionNum+5)).rstrip()
  138.  
  139.         print self.questionText
  140.         print self.answerAText
  141.         print self.answerBText
  142.         print self.answerCText
  143.         print self.answerDText
  144.         print self.correctAnswer
  145.         print self.correctAnswerNum
  146.  
  147.         #Translate correctAnswer's ABCD to 0123:
  148.         if self.correctAnswer.upper() == "A":
  149.             self.correctAnswerNum = 0
  150.         if self.correctAnswer.upper() == "B":
  151.             self.correctAnswerNum = 1
  152.         if self.correctAnswer.upper() == "C":
  153.             self.correctAnswerNum = 2
  154.         if self.correctAnswer.upper() == "D":
  155.             self.correctAnswerNum = 3
  156.  
  157.         ### Update all the entry boxes based on the variables from getInformation():
  158.         self.eQuestion["state"] = "normal"
  159.         self.eQuestion.delete(0, END)
  160.         self.eQuestion.insert(0, self.questionText)
  161.         self.eQuestion["state"] = "disabled"
  162.  
  163.         print self.eQuestion.get()
  164.  
  165.         answerLetter = 0
  166.         for self.each in self.eAnswerChoices:
  167.             self.each["state"] = "normal"
  168.             self.each.delete(0, END)
  169.             if answerLetter == 0:
  170.                 self.each.insert(0, self.answerAText)
  171.             if answerLetter == 1:
  172.                 self.each.insert(0, self.answerBText)
  173.             if answerLetter == 2:
  174.                 self.each.insert(0, self.answerCText)
  175.             if answerLetter == 3:
  176.                 self.each.insert(0, self.answerDText)
  177.             self.each["state"] = "disabled"
  178.             answerLetter += 1
  179.  
  180.         self.rVariable.set( self.correctAnswerNum)
  181.         print "self.rVariable: %s"%self.rVariable
  182.  
  183.         for self.each in self.rAnswerChoices:
  184.             self.each["state"] = "normal"
  185.             self.each["variable"] = self.rVariable
  186.             self.each["state"] = "disabled"
  187.            
  188.         if self.boolEdit == FALSE:
  189.             self.bNext["state"] = "normal"
  190.             self.bPrev["state"] = "normal"
  191.             self.bAdd["state"]  = "normal"
  192.         if self.boolAdd  == FALSE:
  193.             self.bNext["state"] = "normal"
  194.             self.bPrev["state"] = "normal"
  195.             self.bAdd["state"]  = "normal"
  196.  
  197.     def initialize(self):
  198.         ### Create the main container:
  199.         self.mainContainer = Frame(self.myParent)
  200.         self.mainContainer.pack()
  201.  
  202.         ### Internal Variables:
  203.         self.correctAnswerNum = 0
  204.         self.rVariable = IntVar()
  205.         self.eAnswerChoices = []
  206.         self.rAnswerChoices = []
  207.         self.numberOfLines = 0
  208.         self.questionNum = 1
  209.         self.boolEdit = FALSE
  210.         self.boolAdd  = FALSE
  211.         #--------------------------------------------------------------------------------------------------
  212.  
  213.         ### Create the "Question" Entry box (Initially Disabled), with the "Question" Label and Number:
  214.         lQuestion = Label(self.mainContainer, text="Current Question:").grid(row=0,column=0)
  215.         self.eQuestion = Entry(self.mainContainer, width=75,)
  216.         self.eQuestion.grid(row=0,column=1,columnspan=3)
  217.  
  218.         ### Create the "Answer" Entry Boxes (Initially Disabled), with "Answer" labels and both Radio boxes
  219.         ### in the following format: [A] [QUESTION] ( ). The radio box'd answer is the correct answer.
  220.         lAnswerChar     = Label(self.mainContainer, text="Answer Letter:").grid(row=2,column=0)
  221.         lAnswerChoice   = Label(self.mainContainer, text="Possible Answers:").grid(row=2,column=1)
  222.         lAnswerCorrect  = Label(self.mainContainer, text="Correct Answer:").grid(row=2, column=2)
  223.         lAnswerCharA    = Label(self.mainContainer, text="A").grid(row=3,column=0)
  224.         lAnswerCharB    = Label(self.mainContainer, text="B").grid(row=4,column=0)
  225.         lAnswerCharC    = Label(self.mainContainer, text="C").grid(row=5,column=0)
  226.         lAnswerCharD    = Label(self.mainContainer, text="D").grid(row=6,column=0)
  227.  
  228.         self.eAnswerChoiceA     = Entry(self.mainContainer, width=50)
  229.         self.eAnswerChoiceB     = Entry(self.mainContainer, width=50)
  230.         self.eAnswerChoiceC     = Entry(self.mainContainer, width=50)
  231.         self.eAnswerChoiceD     = Entry(self.mainContainer, width=50)
  232.         self.eAnswerChoices.append(self.eAnswerChoiceA)
  233.         self.eAnswerChoices.append(self.eAnswerChoiceB)
  234.         self.eAnswerChoices.append(self.eAnswerChoiceC)
  235.         self.eAnswerChoices.append(self.eAnswerChoiceD)
  236.  
  237.         self.rAnswerChoiceA     = Radiobutton(self.mainContainer, variable=self.rVariable, value=0)
  238.         self.rAnswerChoiceB     = Radiobutton(self.mainContainer, variable=self.rVariable, value=1)
  239.         self.rAnswerChoiceC     = Radiobutton(self.mainContainer, variable=self.rVariable, value=2)
  240.         self.rAnswerChoiceD     = Radiobutton(self.mainContainer, variable=self.rVariable, value=3)
  241.         self.rAnswerChoices.append(self.rAnswerChoiceA)
  242.         self.rAnswerChoices.append(self.rAnswerChoiceB)
  243.         self.rAnswerChoices.append(self.rAnswerChoiceC)
  244.         self.rAnswerChoices.append(self.rAnswerChoiceD)
  245.         #--------------------------------------------------------------------------------------------------
  246.  
  247.         ### Pack the Radiobuttons
  248.         currRow = 3
  249.         for each in self.rAnswerChoices:
  250.             each.grid(row=currRow,column=2)
  251.             currRow += 1
  252.  
  253.         ### Pack the AnswerChoices
  254.         currRow = 3
  255.         for each in self.eAnswerChoices:
  256.             each.grid(row=currRow,column=1)
  257.             currRow += 1
  258.  
  259.         #--------------------------------------------------------------------------------------------------
  260.  
  261.         ### Create the buttons: NEXT, PREV, ADD, EDIT, DELETE, SAVE
  262.  
  263.         self.bPrev          = Button(self.mainContainer, text="Previous Question",command=self.previousQuestion,)
  264.         self.bNext          = Button(self.mainContainer, text="Next Question",command=self.nextQuestion,)
  265.         self.bAdd           = Button(self.mainContainer, text="Add New", command=self.addQuestion,)
  266.         self.bEdit          = Button(self.mainContainer, text="Edit Current", command=self.editQuestion,)
  267.         self.bSave          = Button(self.mainContainer, text="Save Changes", command=self.saveQuestion,)
  268.         self.bDelete        = Button(self.mainContainer, text="Delete Question", command=self.deleteQuestion)
  269.  
  270.         self.bPrev.grid(row=7, column=0)
  271.         self.bNext.grid(row=7, column=2)
  272.         self.bAdd.grid(row=8, column=0)
  273.         self.bEdit.grid(row=8, column=1)
  274.         self.bSave.grid(row=8, column=2)
  275.         self.bDelete.grid(row=8, column=3)
  276.  
  277.         #--------------------------------------------------------------------------------------------------
  278.  
  279.  
  280.         ### Set all the local Quiz Variables:
  281.         self.getInformation()
  282.  
  283.         ### At the end, update the display:
  284.         self.updateDisplay()
  285.  
  286.  
  287. root = Tk()
  288. myapp = QuizGUI(root)
  289. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment