使Python龟窗口大小与画布大小

时间:2016-03-16 07:20:15

标签: python turtle-graphics

我正在用Python龟画叙利亚国旗。我现在遗漏了两颗绿色星星,因为它们需要一个外部依赖(哦哇,这对于一个偶然的政治双关语来说是怎么回事)。这是代码:

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龟的内脏有关,它只是允许一个小边框,以便看到坐标(0,0)上的内容,但我找不到任何实际的文档显示了乌龟是如何工作的,它们只是说“setup(x,y)=设置画布大小”或bgcolor(“在这里输入颜色”),并且不解释组成这些函数的任何定义。

有谁知道如何:

  1. 删除边框?
  2. 使窗口大小等于画布大小,因此覆盖红色边框?
  3. 干杯!

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

1 个答案:

答案 0 :(得分:0)

  

不确定是否可以更改它,除非我从头开始创建tk窗口   首先就没有使用乌龟的目的。

您可以使用tkinter创建窗口结构,然后在其中嵌入乌龟画布。下面是以此方式完成程序的示例,您可以在其中的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

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