【问题标题】:Zelle Graphics interface issueZelle 图形界面问题
【发布时间】:2017-02-28 10:23:54
【问题描述】:

我正在使用Zelle Graphics library,但在替换图形对象(在这种情况下,恰好是文本对象)时遇到问题。

代码如下:

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 函数,但它要么根本不出现,要么重叠。

有人有什么建议吗?我希望为每个新的抽认卡问题替换文本。

谢谢!

【问题讨论】:

    标签: python zelle-graphics


    【解决方案1】:

    如果你想让某些东西不可见,你需要使用 undraw() 命令。我建议将它放在您的 continue 语句之前。像这样使用

    questionText.undraw()
    questionAnswer.undraw()
    

    或者,您可以在完成后使用 del 命令删除每个 questionText/questionAnswer 实例。这可能是一个更好的选择,因为您实际上是在以这种方式释放内存,而不是存储数据并且不对其进行任何操作。

    【讨论】:

    • 嗯。我觉得 undraw 应该可以工作,但不是在下一次迭代之前取消绘制它,而是从一开始就永远不会出现。 :\
    • 这个程序应该如何流动?除了输入语句之外,程序没有任何地方可以停止并显示某些内容。而且您在在屏幕上绘制问题之前要求输入,所以我认为它只是将代码从 draw() 运行到 undraw() 太快而无法在屏幕上注意到。如果将问题绘制代码放在 input() 语句之前,有帮助吗?我建议导入 time.sleep() 并将其用于您的答案部分。 (即,在您的 questionAnswer.draw() 和 continue 语句之间添加类似 time.sleep(2) 的内容)。
    【解决方案2】:

    您可以使用 setText 方法来更改文本。

    示例:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      相关资源
      最近更新 更多