【问题标题】:How to display texts in front of the box in Python?如何在 Python 中的框前显示文本?
【发布时间】:2020-05-17 15:13:25
【问题描述】:

我创建了一个框和一个文本,我希望文本显示在框的前面。但是当我尝试这样做时,我看不到它,因为它在盒子后面。

import turtle

wn= turtle.Screen()

style = ("Courier", "36", "bold")

#Box -------------------------- ([Text] Box)

b1 = turtle.Turtle()
b1.color("black")
b1.shape("square")
b1.speed(0)
b1.shapesize(stretch_wid=5, stretch_len=10)
b1.penup()
b1.goto(-400, -150)



#Text ------------------------ "[Text]"

t1= turtle.Turtle()
t1.speed(0)
t1.color("white")
t1.ht()
t1.penup()
t1.goto(-400, -150)
t1.write("[Text]", font=style, align = "center")

#Main loop

while True:

    wn.update()

我检查了代码的顺序是否错误,但没有发现任何错误。我也尝试删除t1.ht(),但这不是问题。我该如何解决?

【问题讨论】:

  • shape() 不是画布上的盒子,而是乌龟的形状——乌龟总是在上面。要绘制框,您必须使用 forward()/left(90)fill()

标签: python python-turtle


【解决方案1】:

下面是一种混合了您尝试做的和@furas 推荐的方法。它使用 stamping 而不是 drawing 来简化问题:

from turtle import Screen, Turtle

FONT_SIZE = 36
FONT = ('Courier', FONT_SIZE, 'bold')

screen = Screen()

textbox = Turtle()
textbox.hideturtle()
textbox.color('black')
textbox.shape('square')
textbox.shapesize(stretch_wid=5, stretch_len=10)
textbox.penup()
textbox.goto(-300, -150)
textbox.stamp()
textbox.color('white')
textbox.goto(-300, -150 - FONT_SIZE/2)  # center vertically based on font size
textbox.write("[Text]", align='center', font=FONT)

screen.mainloop()

textbox 乌龟也可以重复使用和重塑以绘制其他文本框。稍加思考和猜测,您可以根据字体大小和文本本身计算出合理的文本框大小。

【讨论】:

  • 我喜欢@cdlane 给出的答案中的 .stamp() 方法。我使用文本框图章来制作盒子和一个单独的笔对象,以便之后在它们上书写。
【解决方案2】:

shape() 用于定义海龟的形状,而不是在画布上绘制框。因为turtle 总是在最上面,所以文字隐藏在海龟后面。

要绘制方框,您必须使用forward()left()/right()begin_fill()/end_fill()

import turtle

# move 
turtle.penup()
turtle.goto(-400, -150)

# box
turtle.color('black')
turtle.begin_fill()
for x in range(2):
    turtle.forward(300)
    turtle.left(90)
    turtle.forward(100)
    turtle.left(90)
turtle.end_fill()

# move
turtle.penup()
turtle.goto(-250, -125)

# text
turtle.color("white")
turtle.write("[Text]", font=("Courier", "36", "bold"), align="center")

#turtle.goto(0, 0)

turtle.exitonclick()     

结果

【讨论】:

    【解决方案3】:

    问题在于您的 Screen 对象。您不必初始化它,也不必更新它,除非您使用跟踪器。只需删除此 Screen 对象并将末尾的循环更改为

    turtle.exitonclick() 
    

    防止关闭窗口。

    【讨论】:

      猜你喜欢
      • 2014-02-02
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多