1

これは、プログラムの主要部分を開始するために使用している関数のコードですが、ある種のループまたは 10 の質問を作成する何かが必要ですが、次の質問に移動する前に入力ボックスからの入力を待ちます。何か案は?

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

の後にループを開始したいAnswerReply = None

4

2 に答える 2

2

ループは必要ありません。GUI 内の唯一の本当に重要なループはmainloop()シグナルの処理とコールバックの実行です。

例:

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)

Label、Entry、および Button しかありません (レイアウトは気にしませんでした! だけですpack())。

ボタンにはコマンド (別名コールバック) が添付されています。ボタンを押すと、回答が読み込まれ、新しい質問がラベルに割り当てられます。

このクラスの使用法は、`if name == " main " ブロックの例から理解できます。注意: 回答リストは所定の位置に記入されますが、質問リストは変更されません。

于 2013-02-08T12:26:05.977 に答える
0

Tkはわかりませんが、の信号はありませんinput text changedか?必ずあるはずです。この信号が発生したかどうかを確認してから、新しい質問に移ってください。これは、誰かが入力ボックスに何かを入力したことを意味するためです。

于 2013-02-08T11:47:27.283 に答える