2015-08-28 228 views
0

我想在我的程序中運行一個while循環,但是當while循環就位時,代碼停止,並且tkinter窗口無法打開。我該如何解決這個問題?應該這樣,代碼寫出兩個隨機數,然後當輸入正確的答案時,它應該重新循環。Python:由於while循環導致的Tkinter停止

from tkinter import * 
import random 

root = Tk() 

#Frames 
topFrame = Frame(root) # I want an invisible container in root 
topFrame.pack() 
bottomFrame = Frame(root) # I want an invisible container in root 
bottomFrame.pack(side=BOTTOM) 
#End Of Frames 

#Addition Question Maker 



AnswerBox = Entry(topFrame) 
AnswerBox.grid(row=0,column=4) 
EqualsSign = Label(topFrame, text="=").grid(row=0,column=3) 
AdditionSign = Label(topFrame, text="+").grid(row=0,column=1) 

NewQuestion = True 

while NewQuestion == True: 
    AdditionQuestionLeftSide = random.randint(0, 10) 
    AdditionQuestionRightSide = random.randint(0, 10) 
    global Total 
    Total = AdditionQuestionLeftSide + AdditionQuestionRightSide 
    AdditionQuestionRightSide = Label(topFrame, text= AdditionQuestionRightSide).grid(row=0,column=0) 
    AdditionQuestionLeftSide= Label(topFrame, text= AdditionQuestionLeftSide).grid(row=0,column=2) 
    answer = None 


def OutputAnswerText(event): 
    global answer 
    answer = AnswerBox.get() 
    if Total == int(answer): 
     Correct = Label(topFrame, text="Correct").grid(row=2,column=3) 
     NewQuestion = True 
    else: 
     Correct = Label(topFrame, text="Wrong").grid(row=2,column=3) 

AnswerBox.bind('<Return>', OutputAnswerText) 

root.mainloop() 

回答

-1

你有一個無限循環:

while NewQuestion == True: 

沒有地方NewQuestion可以成爲假(和在循環中沒有休息)。所以循環是無限的。

另外:

EqualsSign = Label(topFrame, text="=").grid(row=0,column=3) 

不起作用,因爲grid回報None。如果你想保持到窗口小部件的引用,您必須使用兩行版本像:

AnswerBox = Entry(topFrame) 
AnswerBox.grid(row=0,column=4) 
0

使while循環相反的,我建議作出NewQuestion功能。該函數最初被調用,然後如果答案正確,該函數會再次被調用。這裏是我的函數代碼,以及一個自動輸入刪除選項,以消除在輸入正確答案後退格您的答案的需要。

from tkinter import * 
import random 

root = Tk() 

#Frames 
topFrame = Frame(root) # I want an invisible container in root 
topFrame.pack() 
bottomFrame = Frame(root) # I want an invisible container in root 
bottomFrame.pack(side=BOTTOM) 
#End Of Frames 

#Addition Question Maker 



AnswerBox = Entry(topFrame) 
AnswerBox.grid(row=0,column=4) 
EqualsSign = Label(topFrame, text="=").grid(row=0,column=3) 
AdditionSign = Label(topFrame, text="+").grid(row=0,column=1) 


def NewQuestion(): 
    AdditionQuestionLeftSide = random.randint(0, 10) 
    AdditionQuestionRightSide = random.randint(0, 10) 
    global Total 
    Total = AdditionQuestionLeftSide + AdditionQuestionRightSide 
    AdditionQuestionRightSide = Label(topFrame, text= AdditionQuestionRightSide).grid(row=0,column=0) 
    AdditionQuestionLeftSide= Label(topFrame, text= AdditionQuestionLeftSide).grid(row=0,column=2) 
    answer = None 
    return 

NewQuestion() 

def OutputAnswerText(event): 
    global answer 
    global AnswerBox 
    answer = AnswerBox.get() 
    if Total == int(answer): 
     Correct = Label(topFrame, text="Correct").grid(row=2,column=3) 
     AnswerBox.delete(0, END) 
     NewQuestion() 
    else: 
     Correct = Label(topFrame, text="Wrong").grid(row=2,column=3) 

AnswerBox.bind('<Return>', OutputAnswerText) 

root.mainloop()