0

Zelle Graphics ライブラリを使用していますが、グラフィック オブジェクト (この場合はたまたまテキスト オブジェクト) を置き換えるのに問題があります。

コードは次のとおりです。

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 関数をあちこち動かしてみましたが、まったく表示されないか重なってしまいます。

誰にも提案はありますか?新しいフラッシュカードの質問ごとにテキストを置き換えたい.

ありがとう!

4

2 に答える 2

0

何かを非表示にしたい場合は、undraw() コマンドを使用する必要があります。continue ステートメントの直前に配置することをお勧めします。のように使われている.

questionText.undraw()
questionAnswer.undraw()

別の方法として、del コマンドを使用して、各 questionText/questionAnswer インスタンスを使い終わったら取り除くこともできます。データを保存して何もしないのではなく、実際にそのようにメモリを解放しているので、これはおそらくより良いオプションです。

于 2011-12-11T20:20:43.737 に答える