This is the code for the function I'm using to start the main part of the program, however I want some sort of loop or something which creates ten questions, but waits for an input from the Entry box before moving onto the next question. Any ideas?
def StartGame(): root = Tk() root.title("Maths Quiz - Trigonometry and Pythagoras' Theorem | Start The Game") root.geometry("640x480") root.configure(background = "gray92") global AnswerEntry TotScore = 0 Count = 0 AnswerReply = None WorkingArea = Text(root, width = 70, height = 10, wrap = WORD).place(x = 38, y = 100) n = GetRandomNumber() Angle,Opposite,Adjacent,Hypotenuse = Triangle() Question,RealAnswer = QuestionLibrary(Opposite,Adjacent,Hypotenuse,Angle,n) AskQuestion = Label(root, text = Question, wraplength = 560).place(x = 48, y = 300) PauseButton = ttk.Button(root, text = "Pause").place(x = 380, y = 10) HelpButton = ttk.Button(root, text = "Help", command = helpbutton_click).place(x = 460, y = 10) QuitButton = ttk.Button(root, text = "Quit", command = root.destroy).place(x = 540, y = 10) AnswerEntry = Entry(root) AnswerEntry.place(x = 252, y = 375) SubmitButton = ttk.Button(root, text = "Submit", command = submit_answer).place(x = 276, y = 400) TotScore,AnswerReply = IsAnswerCorrect(Answer,RealAnswer) ScoreLabel = ttk.Label(root, text = TotScore).place(x = 38, y = 10) AnswerReplyLabel = ttk.Label(root, text = AnswerReply).place(x = 295, y = 440) root.mainloop()
I want the loop to start after the
AnswerReply = None
You don't want a loop. The only really important loop inside a GUI should be the
mainloop(), handling signal and executing callbacks.
try: import Tkinter as Tk except ImportError: import tkinter as Tk class QAGame(Tk.Tk): def __init__(self, questions, answers, *args, **kwargs): Tk.Tk.__init__(self, *args, **kwargs) self.title("Questions and answers game") self._setup_gui() self._questions = questions[:] self._answers = answers self._show_next_question() def _setup_gui(self): self._label_value = Tk.StringVar() self._label = Tk.Label(textvariable=self._label_value) self._label.pack() self._entry_value = Tk.StringVar() self._entry = Tk.Entry(textvariable=self._entry_value) self._entry.pack() self._button = Tk.Button(text="Next", command=self._move_next) self._button.pack() def _show_next_question(self): q = self._questions.pop(0) self._label_value.set(str(q)) def _move_next(self): self._read_answer() if len(self._questions) > 0: self._show_next_question() self._entry_value.set("") else: self.quit() self.destroy() def _read_answer(self): answer = self._entry_value.get() self._answers.append(answer) def _button_classification_callback(self, args, class_idx): self._classification_callback(args, self._classes[class_idx]) self.classify_next_plot() if __name__ == "__main__": questions = ["How old are you?", "What is your name?"] answers =  root = QAGame(questions, answers) root.mainloop() for q,a in zip(questions, answers): print "%s\n>>> %s" % (q, a)
We only have a Label, an Entry and a Button (I did not care about layout!, just
Attached to the button is a command (aka callback). When the button is pressed, the answer is read and the new question is assigned to the label.
Usage of this class is understandable from the example in the `if name == "main" block. Please note: the answers-list is filled in place, the questions-list is kept unchanged.