Python 2.7 Turtle代码penup操作未执行问题排查求助
你的Turtle代码未执行penup操作的原因及问题分析
首先,最致命的问题是你把类实例化的代码放在了turtle.mainloop()之后——mainloop()会启动Turtle的事件循环,阻塞程序直到你关闭窗口,所以game = trivia()这行代码永远不会被执行!你的所有按钮绘制逻辑都在trivia类的__init__方法里,这意味着这些代码根本没机会运行,更别说penup()了。
除此之外,代码里还有几个明显的错误,即使调整了顺序,也会导致程序报错或行为异常:
- 方法名拼写错误:你定义的绿色按钮方法是
GrennBtn(多了一个n),但在RedBtn里调用的是self.GreenBtn(),这会触发AttributeError,程序会在这里中断,后续的penup操作自然无法执行。 - 方法调用参数错误:在
GrennBtn里,你调用self.Btn(self),但Btn方法的定义是def Btn(self):——Python会自动把实例作为第一个参数传递给方法,你额外传self会导致参数数量不匹配,触发TypeError,程序中断。 - 按钮绘制后的位置逻辑:虽然这个不是
penup失效的直接原因,但你的Btn方法绘制矩形后,海龟会回到初始位置,不过这个逻辑本身没问题,只是前面的错误会让它没机会正常运行。
修正后的代码示例
我把这些错误都修复了,调整了mainloop()的位置,修正了拼写和参数问题:
import turtle import time t = turtle.Turtle() wn = turtle.Screen() t.ht() t.pensize(6) t.speed(0) wn.title("Trivia") class trivia(): def __init__(self): self.BlueBtn() def Btn(self): t.begin_fill() for p in xrange(2): t.left(90) t.fd(170) t.lt(90) t.fd(470) t.end_fill() def BlueBtn(self): #按钮a - 蓝色按钮 t.penup() t.setx(-370) t.pendown() t.color("blue","aqua") #设置按钮颜色 self.Btn() #绘制按钮 self.RedBtn() def RedBtn(self): #按钮b - 红色按钮 t.pu() t.setx(370) t.pd() t.color("darkred","red") #设置按钮颜色 self.Btn() self.GreenBtn() # 修正方法名拼写 def GreenBtn(self): # 修正方法名拼写 #按钮c - 绿色按钮 t.pu() t.sety(-400) t.pd() t.color("darkgreen","green") #设置按钮颜色 self.Btn() # 移除多余的self参数 #绘制按钮 self.GoldBtn() def GoldBtn(self): #按钮d - 金色按钮 t.pu() t.setx(-370) t.pd() t.color("gold","khaki") #设置按钮颜色 self.Btn() #绘制按钮 # 先实例化类,再启动事件循环 game = trivia() turtle.mainloop() #点击关闭按钮退出画布
现在运行这段代码,你会看到四个按钮被正确绘制,penup()操作也能正常工作——海龟会抬起笔移动到指定位置,不会留下多余的线条。
内容的提问来源于stack exchange,提问作者the LEGENDARY
相关产品推荐
相关产品推荐

