使Python turtle窗口大小与画布大小相同

使Python turtle窗口大小与画布大小相同,python,turtle-graphics,Python,Turtle Graphics,我正在用蟒蛇龟画叙利亚国旗。我暂时忽略了这两颗绿星,因为它们需要一个外部依赖(哦,哇,一个偶然的政治双关语是怎么回事?哈哈)。代码如下: from turtle import * # Set up the drawing environment length = 600 height = 400 setup(length, height) setworldcoordinates(0,0,length,height) goto(0,0) colours = ["red","black","whi

我正在用蟒蛇龟画叙利亚国旗。我暂时忽略了这两颗绿星,因为它们需要一个外部依赖(哦,哇,一个偶然的政治双关语是怎么回事?哈哈)。代码如下:

from turtle import *

# Set up the drawing environment
length = 600
height = 400
setup(length, height)
setworldcoordinates(0,0,length,height)
goto(0,0)
colours = ["red","black","white","Darkgreen"]
bgcolor(colours[0])
speed('fastest')

## Black Stripe ##

pencolor(colours[1])
pendown()
fillcolor(colours[1])
begin_fill()
goto(length,0)
goto(length,height/3)
goto(0,height/3)
goto(0,0)
end_fill()
penup()

# White Stripe

goto(0,height/3)
pencolor(colours[2])
pendown()
fillcolor(colours[2])
begin_fill()
goto(length,height/3)
goto(length,(height/3)*2)
goto(0,(height/3)*2)
goto(0,height/3)
end_fill()
penup()

ht()
done()
为什么图像周围有红色边框?我已将画布大小和坐标系设置为彼此相等,以便1个像素等于1个像素。例如,正如我告诉它的那样,黑框应该从画布的左下角开始,但它的中间有一个红色边框。如果在运行代码后手动调整窗口大小,无论您试图将窗口缩小到多小以重叠红色边框,都将始终存在红色边框。我甚至没有在代码中写入边框

我认为这可能与Python turtle的内部结构有关,它只允许使用一个小边框来查看坐标(0,0)上的内容,但我找不到任何实际显示turtle工作原理的文档,它们都只是说“设置(x,y)=设置画布大小”或bgcolor(“在此处输入颜色”)不要解释构成函数的任何定义

有人知道如何:

  • 移除边界
  • 使窗口大小等于画布大小,从而覆盖红色边框
  • 干杯

    (编辑:顺便说一下,
    screensize(长度、高度)
    为我提供了红色边框和滚动条。)

    我不确定我是否能改变它,除非我从头做一个tk窗口 这违背了使用海龟的初衷

    您可以使用tkinter创建窗口结构,然后在其中嵌入海龟画布。下面是一个以这种方式完成的程序示例,您可以在turtle的
    Scrolled Canvas
    和tkiner的纯“Canvas”之间切换以查看差异:

    import tkinter as tk
    from turtle import TurtleScreen, RawTurtle, ScrolledCanvas
    
    WIDTH, HEIGHT = 640, 480
    
    root = tk.Tk()
    
    canvas = tk.Canvas(root, width=WIDTH, height=HEIGHT)
    # canvas = ScrolledCanvas(root, width=WIDTH, height=HEIGHT)
    canvas.pack()
    
    screen = TurtleScreen(canvas)
    screen.setworldcoordinates(0, 0, WIDTH, HEIGHT)
    screen.bgcolor('red')
    
    turtle = RawTurtle(screen, visible=False)
    turtle.speed('fastest')
    
    ## Black Stripe ##
    
    turtle.color('black')
    
    turtle.begin_fill()
    turtle.setx(WIDTH)
    turtle.sety(HEIGHT / 3)
    turtle.setx(0)
    turtle.sety(0)
    turtle.end_fill()
    
    ## White Stripe ##
    
    turtle.penup()
    turtle.sety(HEIGHT / 3)
    turtle.pendown()
    
    turtle.color('white')
    
    turtle.begin_fill()
    turtle.setx(WIDTH)
    turtle.sety(2 * HEIGHT / 3)
    turtle.setx(0)
    turtle.sety(HEIGHT / 3)
    turtle.end_fill()
    
    screen.mainloop()
    
    ScrolledCanvas
    引入了更多的chrome(边框和其他开销),它可以改变事物,有时会以不希望的方式。下面是一个垂直切片,显示左侧的纯
    画布
    和右侧的
    滚动画布
    之间的差异:


    随着更多的铬元素添加到窗口中,绘图区域会略微移动。虽然在输出中看到的大量偏移量在移动窗口时会部分消失,这显然是一个错误。

    无法解释为什么会有边框,但如果您将
    setworldcordinations
    行更改为
    setworldcordinations(10,10,长度,高度)
    ,它会消除大部分偏移量。@SiHa谢谢,我想知道是什么原因造成了10个像素的差异?我想知道为什么画布的底部和右边缘总是有边界线,不管尝试了什么?我认为这是一个错误。第一次拖动窗口时,“边框”会发生变化:)@SiHa-Oh ok。Tkinter canvas作为highlightthickness选项,默认设置为1px。我不确定我是否可以改变它,除非我从头开始做一个tk窗口,这违背了使用turtle的初衷。。。我想这肯定更接近问题的核心。干杯