如何使write()函数生成的文字显示在turtle可点击方块前方?
问题解决:让文字显示在可点击方块前方
首先修正你代码里的语法错误:rockText = turtle.Turtle 必须改成 rockText = turtle.Turtle()——你现在是把类赋值给变量,而非实例化对象,这会直接导致后续调用speed()等方法报错。
针对文字被方块遮挡的问题,核心原因是:turtle库中,动态的turtle对象(比如你的方块Rock)默认会显示在画布静态图形(比如write输出的文字)的上方。以下是两种可行的解决方法:
方案1:将方块发送到底层
在创建完方块后,调用Rock.send_to_back(),强制把方块放到所有图形的底层,文字自然就会显示在前面。同时调整文字坐标,让它真正居中在方块前方:
def rockClick(x, y): if Rock.color()[0] == 'white': Rock.color('black', 'white') else: Rock.color('white', 'black') # 创建Rock方块 Rock = turtle.Turtle() Rock.speed(0) Rock.shape('square') Rock.color('white', 'black') Rock.penup() Rock.shapesize(stretch_wid=7, stretch_len=7, outline=5) Rock.goto(-230,-240) Rock.onclick(rockClick) Rock.onrelease(rockClick) # 关键:将方块发送到底层,避免遮挡文字 Rock.send_to_back() playerChoice = 'Rock' # 创建Rock文字(修正实例化方式+调整坐标居中) rockText = turtle.Turtle() rockText.speed(0) rockText.color('white') rockText.penup() rockText.hideturtle() rockText.goto(-230, -280) rockText.write('Rock', align='center', font=('Courier', 24, 'bold'))
方案2:调整创建顺序+层级控制
如果方案1效果不佳,可以先创建文字,再创建方块,利用turtle“后创建的对象层级更高”的特性,再配合send_to_back()确保方块在文字下方:
def rockClick(x, y): if Rock.color()[0] == 'white': Rock.color('black', 'white') else: Rock.color('white', 'black') # 先创建文字 rockText = turtle.Turtle() rockText.speed(0) rockText.color('white') rockText.penup() rockText.hideturtle() rockText.goto(-230, -280) rockText.write('Rock', align='center', font=('Courier', 24, 'bold')) # 再创建方块 Rock = turtle.Turtle() Rock.speed(0) Rock.shape('square') Rock.color('white', 'black') Rock.penup() Rock.shapesize(stretch_wid=7, stretch_len=7, outline=5) Rock.goto(-230,-240) Rock.onclick(rockClick) Rock.onrelease(rockClick) Rock.send_to_back() playerChoice = 'Rock'
内容的提问来源于stack exchange,提问作者Fr0gger_
相关产品推荐
相关产品推荐

