Xom9ik

Lab_7/15var (IV semester) .py

Apr 17th, 2018
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.86 KB | None | 0 0
  1. import tkinter
  2. import tkinter.filedialog
  3.  
  4.  
  5. class Questions:
  6.     def __init__(self, id, question, answer1, answer2, answer3, answer4, right):
  7.         self.id = id
  8.         self.question = question
  9.         self.answer1 = answer1
  10.         self.answer2 = answer2
  11.         self.answer3 = answer3
  12.         self.answer4 = answer4
  13.         self.right = right
  14.  
  15.     def getId(self):
  16.         return self.id
  17.  
  18.     def getQuestion(self):
  19.         return self.question
  20.  
  21.     def getAnswer1(self):
  22.         return self.answer1
  23.  
  24.     def getAnswer2(self):
  25.         return self.answer2
  26.  
  27.     def getAnswer3(self):
  28.         return self.answer3
  29.  
  30.     def getAnswer4(self):
  31.         return self.answer4
  32.  
  33.     def getRight(self):
  34.         return self.right
  35.  
  36.  
  37. def Center(toplevel):
  38.     toplevel.update_idletasks()
  39.     w = toplevel.winfo_screenwidth()
  40.     h = toplevel.winfo_screenheight()
  41.     size = tuple(int(_) for _ in toplevel.geometry().split('+')[0].split('x'))
  42.     x = w / 2 - size[0] / 2
  43.     y = h / 2 - size[1] / 2
  44.     toplevel.geometry("%dx%d+%d+%d" % (size + (x, y)))
  45.  
  46.  
  47. def OnOpen():
  48.     ftypes = [('Python files', '*.dat'), ('All files', '*')]
  49.     dlg = tkinter.filedialog.Open(filetypes=ftypes)
  50.     fl = dlg.show()
  51.     if fl != '':
  52.         ReadFileText(fl)
  53.  
  54.  
  55. def ReadFileText(arg):
  56.     global path, screen, root, arrayQuestions
  57.     path = arg
  58.     file = open(path, 'rt')
  59.     inputFile = []
  60.     arrayQuestions = []
  61.  
  62.     for line in file:
  63.         row = [i for i in line.split('\t')]
  64.         inputFile.append(row)
  65.     for line in inputFile:
  66.         arrayQuestions.append(
  67.             Questions(line[0], line[1], line[2], line[3], line[4], line[5], line[6].replace("\n", "")))
  68.  
  69.     View()
  70.     file.close()
  71.  
  72.  
  73. class View():
  74.     def __init__(self):
  75.         self.ViewQuestion()
  76.  
  77.     def ChangeAnswer(self, a):
  78.         global ans
  79.         ans = a
  80.         print("change: ", ans)
  81.  
  82.     def ViewQuestion(self):
  83.         global numberQuestion, arrayQuestions, indexLabel, R1, R2, R3, R4, SubmitButton, right, wrong, StatusBar
  84.         if numberQuestion > 0:
  85.             indexLabel.pack_forget()
  86.             R1.pack_forget()
  87.             R2.pack_forget()
  88.             R3.pack_forget()
  89.             R4.pack_forget()
  90.             SubmitButton.pack_forget()
  91.             print("ans: ", ans)
  92.             print("arrayQuestions: ", arrayQuestions[numberQuestion - 1].getRight())
  93.             if (ans == arrayQuestions[numberQuestion - 1].getRight()):
  94.                 print("true)")
  95.                 right += 1
  96.             else:
  97.                 print("false(")
  98.                 wrong += 1
  99.         StatusBar.pack_forget()
  100.         StatusBar = tkinter.Label(root, relief="sunken",
  101.                                   text="Total answers: " + str(right + wrong) + "      Right answers: " + str(
  102.                                       right) + "      Wrong answers: " + str(wrong))
  103.         StatusBar.pack(side=tkinter.BOTTOM, expand=tkinter.YES, fill=tkinter.X, anchor=tkinter.SW, pady=(2, 0))
  104.  
  105.         print(numberQuestion)
  106.         if (numberQuestion < len(arrayQuestions)):
  107.             indexLabel = tkinter.Label(root, text=str(numberQuestion + 1) + ") " + arrayQuestions[
  108.                 numberQuestion].getQuestion(), pady=10)
  109.             indexLabel.pack(side=tkinter.TOP)
  110.             R1 = tkinter.Radiobutton(root, text=arrayQuestions[numberQuestion].getAnswer1(),
  111.                                      value=arrayQuestions[numberQuestion].getAnswer1(),
  112.                                      command=lambda: self.ChangeAnswer(arrayQuestions[numberQuestion - 1].getAnswer1()))
  113.             R2 = tkinter.Radiobutton(root, text=arrayQuestions[numberQuestion].getAnswer2(),
  114.                                      value=arrayQuestions[numberQuestion].getAnswer2(),
  115.                                      command=lambda: self.ChangeAnswer(arrayQuestions[numberQuestion - 1].getAnswer2()))
  116.             R3 = tkinter.Radiobutton(root, text=arrayQuestions[numberQuestion].getAnswer3(),
  117.                                      value=arrayQuestions[numberQuestion].getAnswer3(),
  118.                                      command=lambda: self.ChangeAnswer(arrayQuestions[numberQuestion - 1].getAnswer3()))
  119.             R4 = tkinter.Radiobutton(root, text=arrayQuestions[numberQuestion].getAnswer4(),
  120.                                      value=arrayQuestions[numberQuestion].getAnswer4(),
  121.                                      command=lambda: self.ChangeAnswer(arrayQuestions[numberQuestion - 1].getAnswer4()))
  122.             R1.pack(side=tkinter.TOP, pady=0)
  123.             R2.pack(side=tkinter.TOP, pady=0)
  124.             R3.pack(side=tkinter.TOP, pady=0)
  125.             R4.pack(side=tkinter.TOP, pady=0)
  126.             if (numberQuestion < len(arrayQuestions) - 1):
  127.                 SubmitButton = tkinter.Button(root, text='Next', height=1, width=16, command=self.ViewQuestion)
  128.                 SubmitButton.pack()
  129.             else:
  130.                 SubmitButton = tkinter.Button(root, text='Done', height=1, width=16, command=self.ViewQuestion)
  131.                 SubmitButton.pack()
  132.             numberQuestion += 1
  133.         else:
  134.             resultScreen = tkinter.Tk()
  135.             resultScreen.geometry('225x120')
  136.             resultScreen.title("Result Screen")
  137.             Center(resultScreen)
  138.             resultLabel = tkinter.Label(resultScreen, text='Your Result, ' + name)
  139.             resultLabel.pack(side=tkinter.TOP)
  140.             rightLabel = tkinter.Label(resultScreen, text='Right: ' + str(right))
  141.             rightLabel.pack(side=tkinter.TOP)
  142.             wrongLabel = tkinter.Label(resultScreen, text='Wrong: ' + str(wrong))
  143.             wrongLabel.pack(side=tkinter.TOP)
  144.             SubmitButton = tkinter.Button(resultScreen, text='Quit', height=1, width=16, command=quit)
  145.             SubmitButton.pack(pady=10)
  146.  
  147.  
  148. def EnterName():
  149.     global name, welcomeEntryBox, welcomeScreen
  150.     name = welcomeEntryBox.get()
  151.     welcomeScreen.destroy()
  152.     global root
  153.  
  154.  
  155. def main():
  156.     global root, arrayQuestions, welcomeEntryBox, welcomeScreen, numberQuestion, right, wrong, StatusBar, ans
  157.     numberQuestion = 0
  158.     ans = ""
  159.     welcomeScreen = tkinter.Tk()
  160.     welcomeScreen.geometry('225x100')
  161.     welcomeScreen.title("Welcome Screen")
  162.     Center(welcomeScreen)
  163.  
  164.     welcomeLabel = tkinter.Label(welcomeScreen, text='Enter your name')
  165.     welcomeLabel.pack(side=tkinter.TOP)
  166.     welcomeEntryBox = tkinter.Entry(welcomeScreen)
  167.     welcomeEntryBox.focus_set()
  168.     welcomeEntryBox.pack(side=tkinter.TOP, pady=10, padx=10)
  169.  
  170.     mySubmitButton = tkinter.Button(welcomeScreen, text='Ok', height=1, width=16, command=EnterName)
  171.     mySubmitButton.pack()
  172.     welcomeScreen.mainloop()
  173.  
  174.     root = tkinter.Tk()
  175.     root.geometry('750x500')
  176.     root.title("Python Lab #7")
  177.  
  178.     arrayQuestions = []
  179.  
  180.     menubar = tkinter.Menu(root)
  181.  
  182.     filemenu = tkinter.Menu(menubar, tearoff=0)
  183.     filemenu.add_command(label="Open", command=OnOpen)
  184.     filemenu.add_separator()
  185.     filemenu.add_command(label="Exit", command=root.quit)
  186.  
  187.     menubar.add_cascade(label="File", menu=filemenu)
  188.  
  189.     root.config(menu=menubar)
  190.     Name = tkinter.Label(root, text="Member: " + name)
  191.     Name.pack(side=tkinter.TOP, anchor="w")
  192.     Center(root)
  193.  
  194.     right = 0
  195.     wrong = 0
  196.     StatusBar = tkinter.Label(root, relief="sunken",
  197.                               text="Total answers: " + str(right + wrong) + "      Right answers: " + str(
  198.                                   right) + "      Wrong answers: " + str(wrong))
  199.     StatusBar.pack(side=tkinter.BOTTOM, expand=tkinter.YES, fill=tkinter.X, anchor=tkinter.SW, pady=(2, 0))
  200.  
  201.     root.mainloop()
  202.  
  203.  
  204. if __name__ == "__main__":
  205.     main()
  206. # Example Questions.dat
  207. # if "Error:list index out of range" - replace SPACE with TAB in Questions.dat
  208. 1   1+7 43  10  12  8   8
  209. 2   2+4 11  22  6   44  6
  210. 3   3+5 5   10  8   4   8
  211. 4   4+8 9   1   12  6   12
  212. 5   5+2 7   9   3   8   7
  213. 6   6+6 6   7   12  5   12
  214. 7   7+3 1   10  7   3   10
  215. 8   8+3 11  2   3   1   11
  216. 9   9+6 5   22  3   15  15
  217. 10  10+1    6   11  13  4   11
Advertisement
Add Comment
Please, Sign In to add comment