【问题标题】:Is it possible to change turtle's pen stroke?可以改变乌龟的笔触吗?
【发布时间】:2015-01-30 20:58:15
【问题描述】:

我需要使用 Python 的海龟图形绘制条形图,我认为将笔简单地制作成一个厚正方形会更容易,这样我就可以画出这样的条形,而不必担心制作几十个矩形并填充它们在。

当我使用turtle.shape('square') 设置海龟形状时,它只会改变笔的外观,但对实际绘图没有影响:

有没有办法让乌龟真正画出一个矩形笔划,是通过内置方法还是通过修改乌龟文件?

我不想要圆角,像这样:

【问题讨论】:

  • 你试过turtle.pensize(int),参数是PX的大小吗?
  • 是的,这只是做一个更大的椭圆。

标签: python graphics graph turtle-graphics


【解决方案1】:

似乎无法更改笔触本身的形状。 turtle.shape('square') 只改变乌龟的形状,不改变笔触。我建议降低笔的大小,并创建一个绘制矩形的函数。您可以使用它来绘制条形图。

【讨论】:

  • turtle.shape("square") 只要你使用turtle.stamp() 就可以工作——见this answer
【解决方案2】:

要回答标题中提出的问题:不,不能直接更改笔划 (请参阅cdlane's answer 了解通过修改硬编码的可能方法值来自tkinter)

不过,我确实为问题正文中的用例找到了解决方法。

可以像这样注册自定义笔形状(在这种情况下,表示条的确切形状和大小):

screen.register_shape("bar", ((width / 2, 0), (-width / 2, 0), (-width / 2, height), (width / 2, height)))`

然后我们可以简单地遍历每个条形图,用新值更新笔形,并使用turtle.stamp 将完成的条形图标记到图表上,无需绘图。

【讨论】:

    【解决方案3】:

    对于这个问题,我有两个解决方案,我已经在各种程序中使用过。

    第一个是您的邮票解决方案的变体。不要使用screen.register_shape() 为每条线注册一个自定义多边形,而是使用方形海龟并将每条线turtle.turtlesize() 它放入您要标记的矩形中:

    from turtle import Turtle, Screen
    
    STAMP_SIZE = 20  # size of the square turtle shape
    
    WIDTH, LENGTH = 25, 125
    
    yertle = Turtle(shape="square")
    yertle.penup()
    
    yertle.turtlesize(WIDTH / STAMP_SIZE, LENGTH / STAMP_SIZE)
    
    yertle.goto(100 + LENGTH//2, 100)  # stamps are centered, so adjust X
    
    yertle.stamp()
    
    screen = Screen()
    screen.exitonclick()
    

    当我需要 draw 而不是 stamp 时,我的另一个解决方案是进入海龟的 tkinter 基础并修改海龟的硬编码线端形状本身:

    from turtle import Turtle, Screen
    import tkinter as _
    
    _.ROUND = _.BUTT
    
    WIDTH, LENGTH = 25, 125
    
    yertle = Turtle()
    yertle.width(WIDTH)
    yertle.penup()
    
    yertle.goto(100, 100)
    
    yertle.pendown()
    
    yertle.forward(LENGTH)
    
    screen = Screen()
    screen.exitonclick()
    

    【讨论】:

      【解决方案4】:

      像这样使用多个图章:

      import turtle
      
      turtle.shape("square")
      for count in range(x):
          turtle.stamp()
          turtle.forward(1)
      

      【讨论】:

        猜你喜欢
        • 2021-11-09
        • 1970-01-01
        • 2020-08-11
        • 2013-12-17
        • 2016-06-20
        • 2016-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多