-1

基本的に、私はこのコードを持っています:

from tkinter import *
from tkinter import messagebox
import random
import string
from tkinter import filedialog

ktwoWin = Tk() #window
qLabel = StringVar()
userAnswer = StringVar()
ktwoWin.withdraw() #hide the ktwoWin window
pass

num1= random.randint(1, 12) #random numbers
num2= random.randint(1, 12)
Answer= num1 * num2

def ktwoOpen():
    ktwoWin.deiconify() #show the ktwoWin window

    ktwoWin.title("Kindergarten to Grade Two")
    ktwoWin.geometry("400x300")
    ktwoWin.grid()

    askbutton= Button(ktwoWin, text="ask me a question!", command = askquestion, height=3, width=16, bg="blue")
    askbutton.grid(column= 0, row= 0)

    submitbtn= Button(ktwoWin, text="Submit Answer", command=checkanswer, height=3, width=12, bg= "red")
    submitbtn.grid(column=1, row=0)

    q=Label(ktwoWin,textvariable=qLabel)
    q.grid(column=1, row=1)
    q.config(text="text to go here")
    qLabel.set("some text")
    answerentry= Entry(ktwoWin, textvariable=userAnswer)
    answerentry.grid(column=3, row=3)
    pass

def askquestion():
    qLabel.set("what is" +str(num1) + "x" + str(num2) + "?")

def checkanswer():
    useranswer=userAnswer.get()
    if int(useranswer) != Answer:
        messagebox.showwarning(message="the answer is " + str(Answer))
    else:
        messagebox.showinfo(message="correct!")

ktwoWin.mainloop

私がプログラムを実行するとき、私が持っている乱数は、それが理にかなっている場合、一度だけランダム化されますか?私の質問は、最終的に、コードの乱数部分をループする方法はありますか?どんな助けでもありがたいです、ありがとう:)

4

1 に答える 1

0

回答があるたびに新しい質問を設定するのは非常に簡単です。私は tkinter の専門家ではないので、これはかなり一般的なアドバイスです。

askquestionまず、モジュールのトップ レベルではなく、関数内に 2 つの乱数を設定します。後で製品にアクセスできるようにする必要があるため、globalキーワードを使用して、関数のスコープ外で回答が利用できるようにします (または、コードをクラスに再編成してメンバー変数を使用することもできます)。

また、関数の最後に追加のロジックを追加してcheckanswer、回答が提供された後にプログラムの状態をリセットする必要がある場合もあります (たとえば、古い質問ラベルをクリアし、入力ボックスから古い回答を削除します)。プログラムをどのように再生したいかによって、すぐに新しい質問をしたり、元の開始状態に戻ったりする場合があります。

于 2012-07-29T06:05:23.497 に答える