Question

I'm using Zelle Graphics library and I'm having trouble replacing graphics objects (which, in this case, happens to be text objects).

Here's the code:

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')

This is essentially a mini flash card program I'm making. It takes the interpret commands at the bottom and executes them based on the dictionary in the FlashCard class. It basically works: it does the correct text objects. However, text begins to overlap other text objects because it re-draws. I've tried moving the .draw function all over, but it either doesn't appear at all or it overlaps.

Anyone have any suggestions? I want the text to replace for each new flashcard question.

Thanks!

No correct solution

OTHER TIPS

there's an undraw() command that you need to use if you want to make something invisible. I'd recommend placing it right before your continue statements. It's used like

questionText.undraw()
questionAnswer.undraw()

Alternatively, you can use the del command to get rid of each questionText/questionAnswer instance when you're done with it. That's probably a better option since you're actually freeing up the memory that way instead of storing data and not doing anything with it.

You can use setText method to change the text.

example:

string = Text(Point(1, 1), 'original string') 
sting.setText('new string')
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top