gpt4 book ai didi

python - 使 Python turtle 窗口大小与 Canvas 大小相同

转载 作者:行者123 更新时间:2023-12-05 07:50:36 24 4
gpt4 key购买 nike

我正在用 Python turtle 绘制叙利亚国旗。我暂时省略了两颗绿星,因为它们需要外部依赖(哦,哇,这是一个意外的政治双关语吗?大声笑)。这是代码:

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()

为什么图像周围有红色边框?我已将 Canvas 大小和坐标系设置为彼此相等,以便 1 像素等于 1 像素。例如,黑框应该按照我的指示从 Canvas 的左下边缘开始,但取而代之的是红色边框。如果您在运行代码后手动调整窗口大小,无论您为了与红色边框重叠而将其调整得多么小,总会有一个红色边框。我什至没有在代码中写入边框。

我认为这可能与 Python turtle 的内部结构有关,它只允许一个小边框以便查看坐标 (0,0) 上的内容,但我找不到任何文档实际上显示 turtle 是如何工作的,它们都只是说“setup(x,y) = set canvas size”或 bgcolor(“enter color here”) 之类的东西,并不解释构成函数的任何定义。

有谁知道如何:

  1. 去掉边框?
  2. 使窗口大小等于 Canvas 大小,从而覆盖红色边框?

干杯!

(编辑:顺便说一句,screensize(length,height) 给我红色边框和滚动条。)

最佳答案

Not sure if i can alter it unless i make a tk window from scratch which defeats the purpose of using turtle in the first place.

您可以使用 tkinter 创建窗口结构,然后在其中嵌入 turtle Canvas 。下面是您以这种方式完成的程序示例,您可以在 turtle 的 ScrolledCanvas 和 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(边框和其他开销),它有时会以不受欢迎的方式改变事物。这是一个垂直切片,显示了左侧的普通 Canvas 和右侧的 ScrolledCanvas 之间的区别:

enter image description here

随着更多的镶边被添加到窗口中,绘图区域会轻微移动。尽管您在输出中看到的大量偏移量在您移动窗口时部分消失了,但这确实是一个错误。

关于python - 使 Python turtle 窗口大小与 Canvas 大小相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36029529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com