2011-12-11 3 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 함수를 처음부터 끝까지 옮겨 보았지만, 전혀 나타나지 않거나 겹칩니다.

누구든지 의견이 있으십니까? 나는 새로운 flashcard 질문마다 텍스트를 대체하길 원합니다.

감사합니다.

답변

0

보이지 않게하려면 undraw() 명령을 사용해야합니다. 계속 진술을하기 전에 배치하는 것이 좋습니다. 그것은 또한

questionText.undraw() 
questionAnswer.undraw() 

처럼 사용되는, 당신은 당신이 그것을 완료하면 각 questionText/questionAnswer 인스턴스를 제거하기 위해 델 명령을 사용할 수 있습니다. 실제로 데이터를 저장하고 아무것도 수행하지 않고 메모리를 자유롭게 사용하고 있기 때문에 아마 더 좋은 방법 일 것입니다.

+0

흠. 내가해야 할 일은해야 할 것 같지만, 다음 반복 전에 그것을 꺼내기보다는, 그것은 결코 처음부터 나타나지 않습니다. : \ –

+0

이 프로그램을 어떻게 진행해야합니까? 입력 된 문장을 제외하고, 프로그램이 단지 멈추고 무엇인가를 표시하는 데는 아무 것도 없습니다. 그리고 화면에 질문을 그리기 전에 입력을 요청하고 있습니다. 그래서 draw()에서 코드를 너무 빨리 실행하여 화면에 눈을 뜰 수 있습니다. input() 문 앞에 질문 그리기 코드를 입력하면 도움이됩니까? time.sleep()을 가져 와서 대답 섹션에 사용하는 것이 좋습니다. (즉, questionAnswer.draw()와 continue 문 사이에 time.sleep (2)와 같은 것을 붙이십시오. –

0

setText 메서드를 사용하여 텍스트를 변경할 수 있습니다.

예 :

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