2012-07-29 117 views
-1

基本上,我有這樣的代碼:在python中,使用tkinter,我的隨機數只生成一次?

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 

,當我運行該程序時,隨機數我,只會隨機化一次,如果是有道理的?我的問題最終是否有辦法循環代碼的隨機數部分? 任何幫助表示讚賞,謝謝:)

回答

0

這應該是非常簡單的每個人都回答時建立一個新的問題。我不是tkinter的專家,所以這是相當一般的建議。

首先,在askquestion函數中設置您的兩個隨機數,而不是在模塊的頂層。由於您需要稍後才能訪問產品,請使用關鍵字global以確保答案在函數範圍之外(或者可以將代碼重組爲類並使用成員變量)。

您可能還需要在checkanswer函數末尾添加一些額外的邏輯,以在提供答案(例如,清除舊問題標籤並從輸入框中刪除舊答案)後重置程序狀態。根據你想要播放節目的方式,你可能會立即提出一個新的問題,或者你可能會回到原來的開始狀態。

+0

感謝堆,工作真的很好:) – user1559284 2012-07-29 06:26:52