J'utilise Zelle Graphics library et je n'arrive pas à remplacer les objets graphiques (qui, dans ce cas, se trouvent être des objets texte).Problème de l'interface graphique de Zelle
Voici le 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')
Ceci est essentiellement un mini-programme de carte flash que je fais. Il prend les commandes d'interprétation en bas et les exécute en fonction du dictionnaire de la classe FlashCard. Cela fonctionne essentiellement: il fait les objets de texte corrects. Cependant, le texte commence à chevaucher d'autres objets de texte, car il redessine. J'ai essayé de déplacer la fonction .draw partout, mais elle n'apparaît pas du tout ou se chevauche.
Quelqu'un a des suggestions? Je veux que le texte remplace pour chaque nouvelle question flashcard.
Merci!
Hmm. J'ai l'impression que Undraw devrait fonctionner, mais plutôt que de l'enlever avant la prochaine itération, ça ne se présente jamais au début. : \ –
Comment ce programme devrait-il circuler? Mis à part les déclarations d'entrée, il n'y a nulle part où le programme s'arrête et affiche quelque chose. Et vous demandez des commentaires avant de dessiner la question à l'écran, donc je pense que c'est juste exécuter le code de draw() à undraw() trop rapidement pour remarquer à l'écran. Si vous mettez le code de dessin de question avant l'instruction input(), cela vous aide-t-il? Je vous recommande d'importer time.sleep() et d'utiliser cela pour vos sections de réponses. (c'est-à-dire, coller quelque chose comme time.sleep (2) entre votre questionAnswer.draw() et les instructions continues). –