如何避免“当前绘制的对象”错误?

0 投票
1 回答
1788 浏览
提问于 2025-04-18 03:52

我想写一个Python程序,可以在图形窗口里显示一个字母。如果我点击窗口的右边,字母就变成红色;如果我点击左边,它就变成绿色。这个功能至少要能用五次。我写的代码只能变两次颜色,然后就出现了“graphics.GraphicsError: Object currently drawn”的错误。有没有什么办法解决这个问题?

from graphics import *

def main():
    win= GraphWin("Name",400,400)
    win.setCoords(0.0,0.0,4.0,4.0)
    win.setBackground("white")
    p=Text(Point(2.0,2.0),'B')
    p.setSize(36)
    for i in  range(0,6): 
        c=win.getMouse()
        s=c.getX()

       if s>=2 :

           p.setTextColor("Red")
       else:
           p.setTextColor("Green")

       p.draw(win)
 main()

我对这个还很陌生。我用的是zelle图形模块来实现这个。

1 个回答

0

问题出在 p.draw(win) 这个调用的位置,就像 @korefn 提到的那样。不过,这样改动后,'B' 在第一次点击之前就会变得可见,这和你原来的代码不一样。我在下面的重写代码中加了一些注释,这样 'B' 在被点击之前会和背景颜色一样。

from graphics import *

def main():
    win = GraphWin('Mouse Test', 400, 400)
    win.setCoords(0.0, 0.0, 4.0, 4.0)

    anchorPoint = Point(2.0, 2.0)

    text = Text(anchorPoint, 'B')
    text.setSize(36)  # maximum legal size
    # text.setTextColor('white')  # optional initial invisibility
    text.draw(win)

    for _ in range(6):
        point = win.getMouse()

        if point.getX() >= anchorPoint.getX():
            text.setTextColor('red')
        else:
            text.setTextColor('green')

    win.close()

main()

撰写回答