首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使Python海龟窗口大小与画布大小相同

使Python海龟窗口大小与画布大小相同
EN

Stack Overflow用户
提问于 2016-03-16 07:20:15
回答 1查看 2.5K关注 0票数 3

我在用Python海龟画叙利亚国旗。我暂时忽略了这两颗绿色的星星,因为它们需要外在的依赖(哦,哇,对于一个偶然的政治双关语来说,这是怎么回事?)( lol)下面是代码:

代码语言:javascript
代码运行次数:0
运行
复制
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()

为什么图像周围有红色边框?我已经将画布大小和坐标系设置为相等,这样一个像素等于一个像素。例如,黑匣子应该像我告诉它的那样,从画布的左下角开始,但它的位置却是红色的边框。如果在运行代码后手动调整窗口的大小,则无论您在尝试重叠红色边框时使其变得多么小,始终都会出现红色边框。我甚至都没把边框写进代码里。

我认为这可能与Python海龟的内部有关,它只允许一个小边框,以查看坐标(0,0)上的内容,但我找不到任何文档来显示海龟的工作原理,它们都只是说了一些东西,比如"setup(x,y) = set画布大小“或bgcolor(”在这里输入颜色“),并且没有解释构成函数的任何定义。

有没有人知道如何:

  1. 移除边界?
  2. 使窗口大小与画布大小相等,从而覆盖红色边框?

干杯!

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

EN

回答 1

Stack Overflow用户

发布于 2018-11-24 07:48:09

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

您可以使用tkinter创建窗口结构,然后在其中嵌入海龟画布。下面是以这种方式完成的程序示例,您可以在海龟的ScrolledCanvas和tkiner的普通的“`Canvas”之间切换以了解两者的区别:

代码语言:javascript
代码运行次数:0
运行
复制
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引入了更多的铬(边框和其他开销),这改变了周围的事物,有时是以不受欢迎的方式。下面是一个垂直切片,显示左侧的普通Canvas和右侧的ScrolledCanvas之间的差异:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36029529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档