2011-12-11 80 views
0

我正在使用Zelle Graphics library,我無法替換圖形對象(在這種情況下,它恰好是文本對象)。Zelle圖形界面問題

下面的代碼:

from Graphics import * 

winName = "Window" 
win = Window(winName,600,500) 
win.setBackground(Color('silver')) 


title = Text((300,20),"Zack's Flash Card Maker") 
title.draw(win) 

p1 = Rectangle((50, 100),(550,400)) 
p1.setFill(Color("black")) 
p1.draw(win) 




class FlashCard: 
    def __init__(self): 
     self.commands = {'addQuestion':self.addQuestion,'startGame':self.startGame} 
     self.stack = [] 
     self.questions = {} 
     self.questionAnswered = False 
     self.questionsCorrect = 0 
     self.questionsIncorrect = 0 

    def addQuestion(self): 
     question = ' '.join(self.stack) 
     self.stack = [] 
     answer = input(question) 
     self.questions[question] = answer 

    def startGame(self): 
     for question in self.questions: 
      if(self.questionAnswered == False): 
       answer=input(question) 
       questionText = Text((300,150),question) 
       questionText.setFill(Color("white")) 
       questionText.draw(win) 

       if(answer == self.questions[question]): 
        questionAnswer = Text((300,200),answer + " is correct!") 
        questionAnswer.setFill(Color("green")) 
        questionAnswer.draw(win) 

        self.questionsCorrect = self.questionsCorrect + 1 


        continue 

       else: 
        questionAnswer = Text((300,200),answer + " is incorrect. Study this one.") 
        questionAnswer.setFill(Color("red")) 
        questionAnswer.draw(win) 
        self.questionsIncorrect = self.questionsIncorrect + 1 

        continue 




    def interpret(self,expression): 
     for token in expression.split(): 
      if token in self.commands: 
       operator = self.commands[token] 
       operator() 
      else: 
       self.stack.append(token) 



i = FlashCard() 
i.interpret('What is your dog\'s name? addQuestion') 
i.interpret('What is your favorite thing to do? addQuestion') 
i.interpret('startGame') 

這基本上是我在做一個小型閃存卡程序。它在底部使用解釋命令並根據FlashCard類中的字典執行它們。它基本上起作用:它能夠正確的文本對象。但是,文本開始重疊其他文本對象,因爲它會重新繪製。我嘗試過移動.draw函數,但它要麼完全不顯示,要麼重疊。

任何人有任何建議嗎?我希望文字替換每個新的閃卡問題。

謝謝!

回答

0

有一個undraw()命令,如果你想使某些東西看不見,你需要使用它。我建議在繼續發表聲明之前把它放好。它使用像

questionText.undraw() 
questionAnswer.undraw() 

或者,你可以使用del命令,當你用它做擺脫每個questionText /問題答案實例。這可能是一個更好的選擇,因爲你實際上是以這種方式釋放內存,而不是存儲數據並且不做任何事情。

+0

嗯。我覺得不應該工作,但不要在下一次迭代之前取消它,它只是從不出現。 :\ –

+0

該程序應該如何流動?除了輸入語句之外,程序無法停止並顯示某些內容。在屏幕上繪製問題之前,您需要輸入,所以我認爲它只是從draw()到undraw()運行代碼太快而無法注意屏幕。如果你在input()語句之前放置問題繪圖代碼,這有幫助嗎?我建議導入time.sleep()並將其用於答案部分。 (即,在你的questionAnswer.draw()和continue語句之間插入time.sleep(2)之類的東西)。 –

0

您可以使用setText方法更改文本。

例如:

string = Text(Point(1, 1), 'original string') 
sting.setText('new string')