首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Turtle mainloop()用法

Python Turtle mainloop()用法
EN

Stack Overflow用户
提问于 2016-07-08 02:35:24
回答 2查看 18.3K关注 0票数 1

我有以下来自online tutorial的代码,用于学习基于事件的编程,方法是制作一个在单击鼠标时改变状态的红绿灯。下面是我的全部代码:

代码语言:javascript
复制
import turtle

turtle.setup(400,500)
wn = turtle.Screen()
wn.title("Tess becomes a traffic light!")
wn.bgcolor("lightgreen")
tess = turtle.Turtle()

def draw_housing():
    tess.pensize(3)
    tess.color("black","darkgrey")
    tess.begin_fill()
    tess.forward(80)
    tess.left(90)
    tess.forward(200)
    tess.circle(40, 180)
    tess.forward(200)
    tess.left(90)
    tess.end_fill()

draw_housing()

tess.penup()
tess.forward(40)
tess.left(90)
tess.forward(40)
tess.shape("circle")
tess.shapesize(3)
tess.fillcolor("green")

state_num = 0

def nextFSMstate():
    global state_num
    if state_num == 0:
            tess.forward(70)
            tess.fillcolor("orange")
            state_num = 1
    elif state_num == 1:
            tess.forward(70)
            tess.fillcolor("red")
            state_num = 2
    else:
            tess.back(140)
            tess.fillcolor("green")
            state_num = 0

wn.onkey(nextFSMstate, "space")
wn.listen()
turtle.mainloop()
    # example says wn.mainloop() but I get error. This works though

在本教程中,他们使用:

代码语言:javascript
复制
wn.mainloop()

但是我得到了一个错误:

代码语言:javascript
复制
File "stopLights.py", line 51, in <module>
    wn.mainloop()
AttributeError: '_Screen' object has no attribute 'mainloop'

并且必须使用

代码语言:javascript
复制
turtle.mainloop()

为什么会有不同?我在Ubuntu中使用Python2.7;示例在PyScripter中。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-08 04:34:13

这似乎是教程中的一个错误。

在第4行,它们定义了wn = turtle.Screen(),这意味着后面对wn.mainloop()的调用等同于对turtle.Screen().mainloop()的调用。

这没有任何意义;正如错误消息所述,没有turtle.Screen().mainloop()方法。但是,有一个基本turtle对象的.mainloop()方法,这就是调用它的原因。

票数 3
EN

Stack Overflow用户

发布于 2016-07-08 09:10:21

我怀疑这是因为您使用的Python版本与编写本教程所针对的版本不同。在我的系统上的Python3.5中,turtle.Screen类的一个实例确实有一个mainloop方法,所以您报告的不工作的代码就可以了。

如果您继续使用错误的Python版本,您的代码可能还有其他问题(尽管您在问题中包含的内容似乎是Python2和Python3的公共子集的一部分,而不是mainloop问题)。我强烈建议任何新的Python程序员从Python3开始,只有在他们特别需要使用尚未移植的库时才回到Python2(并了解版本之间的差异)。Python3是未来的趋势,现在对库的支持非常好!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38252920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档