Zelle图形界面问题
我正在使用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函数放在不同的位置,但要么根本不显示,要么就重叠在一起。
有没有人有什么建议?我希望每次新的闪卡问题时,文本能够被替换。
谢谢!
2 个回答
0
你可以使用setText这个方法来改变文本内容。
例如:
string = Text(Point(1, 1), 'original string')
sting.setText('new string')
0
如果你想让某个东西变得看不见,可以使用一个叫做 undraw() 的命令。我建议你把它放在 continue 语句之前。用法如下:
questionText.undraw()
questionAnswer.undraw()
另外,你也可以使用 del 命令来删除每个 questionText/questionAnswer 的实例,当你用完它们的时候。这样做可能更好,因为你实际上是在释放内存,而不是把数据存着却不去使用。