Python 乌龟滚动条
Python Turtle Scrollbars
有谁知道如何防止滚动条出现在 Python 中的 Turtle Graphics window 上,请问小 window 尺寸?
以下代码生成下图。对于 600 像素 x 600 像素的屏幕,滚动条不会出现。
import turtle
TURTLE_SIZE = 20
TRIANGLE_SIZE = 120
screen = turtle.Screen()
screen.setup(400, 400)
triangle = turtle.Turtle("triangle")
triangle.shapesize(TRIANGLE_SIZE / TURTLE_SIZE)
triangle.color("pink")
triangle.right(30)][1]][1]
Does anyone know how to prevent scrollbars appearing on the Turtle
Graphics window in Python
答案可能是在 tkinter 中使用 turtle embedded 而不是 standalone。由于独立 turtle 默认使用 ScrolledCanvas
,而嵌入式 turtle 允许您使用它,或者简单地坚持基本的 Canvas
.
也就是说,这里有三种不同的方法可以使用独立的 turtle 来实现:
1) 只需将正方形 window 从 400 x 400 增加到 420 x 420:
screen.setup(420, 420)
这是有效的,因为 turtle 已将 window 和 canvas:
的默认大小存储在它的全局 _CFG
配置字典中
_CFG = {
"width" : 0.5, # Screen
"height" : 0.75,
"canvwidth" : 400,
"canvheight": 300,
# ...
}
低于这个 canvas 大小,滚动条出现。除了有一个软糖因素来解释 window chrome 我们可以在 setworldcoordinates()
:
中看到
self.screensize(wx-20, wy-20)
因此任何 window 420 x 320 或更大的尺寸在默认情况下都不应获得滚动条,除非 canvas 也进行了重新调整。
2) 通过"turtle.cfg"
文件操作_CFG
字典。与 turtle.pen()
方法动态创建的仿 _pd
笔字典不同,turtle._CFG
字典没有运行时用户界面,除非我们在引擎盖下四处寻找:
from turtle import Screen, Turtle, _CFG
TURTLE_SIZE = 20
TRIANGLE_SIZE = 120
_CFG.update({"canvwidth": 380, "canvheight": 380}) # 400 - 20
screen = Screen()
screen.setup(400, 400)
triangle = Turtle("triangle")
triangle.shapesize(TRIANGLE_SIZE / TURTLE_SIZE)
triangle.color("pink")
triangle.right(30)
screen.exitonclick()
3) 修补独立 turtle 的 _Root
class 的 setupcanvas
方法,用通用 Canvas
代替 ScrolledCanvas
。这消除了对任何幻数的需要,并且将简单地关闭滚动:
import tkinter as TK
from turtle import Screen, Turtle, _Root
def setupcanvas(self, width, height, cwidth, cheight):
self._canvas = TK.Canvas(self, width=cwidth, height=cheight)
self._canvas.pack(expand=1, fill="both")
_Root.setupcanvas = setupcanvas
TURTLE_SIZE = 20
TRIANGLE_SIZE = 120
screen = Screen()
screen.setup(400, 400)
# ...
已编辑
保证margin值尽可能小,会让canva的笛卡尔平面原点尽可能靠近屏幕中心。我有一个实用程序 class,我把它放在下面的 question 上,它有助于调整 window 的属性以找出 margin
的最佳值
我在学习 turtle
时遇到了这个问题。以下方法对我有用:
from turtle import Turtle
donatello = Turtle("turtle")
donatello.color("purple") # just to keep it real
screen = donatello.getscreen()
window_width = 200
window_height = 250
margin = 2 # minimum difference between window size and canvas size to avoid scrollbars
screen.screensize( # despite the name, screensize() does not change window/screen's size
canvwidth=window_width - margin, # named parameters give a hint of method's real goal
canvheight=window_height - margin) # canvas has to be smaller than window
screen.setup(window_width, window_height) # setup() will change window/screen's size
print(f"screensize(canvas) = {screen.screensize()}\n"
f"screen(width*height) = ({screen.window_width()} * {screen.window_height()})")
screen.exitonclick()
输出:
screensize(canvas) = (198, 248)
screen(width*height) = (200 * 250)
基本上就是保证canvas比屏幕尺寸小几个单位,谨防骗人的screensize()
方法
有谁知道如何防止滚动条出现在 Python 中的 Turtle Graphics window 上,请问小 window 尺寸?
以下代码生成下图。对于 600 像素 x 600 像素的屏幕,滚动条不会出现。
import turtle
TURTLE_SIZE = 20
TRIANGLE_SIZE = 120
screen = turtle.Screen()
screen.setup(400, 400)
triangle = turtle.Turtle("triangle")
triangle.shapesize(TRIANGLE_SIZE / TURTLE_SIZE)
triangle.color("pink")
triangle.right(30)][1]][1]
Does anyone know how to prevent scrollbars appearing on the Turtle Graphics window in Python
答案可能是在 tkinter 中使用 turtle embedded 而不是 standalone。由于独立 turtle 默认使用 ScrolledCanvas
,而嵌入式 turtle 允许您使用它,或者简单地坚持基本的 Canvas
.
也就是说,这里有三种不同的方法可以使用独立的 turtle 来实现:
1) 只需将正方形 window 从 400 x 400 增加到 420 x 420:
screen.setup(420, 420)
这是有效的,因为 turtle 已将 window 和 canvas:
的默认大小存储在它的全局_CFG
配置字典中
_CFG = {
"width" : 0.5, # Screen
"height" : 0.75,
"canvwidth" : 400,
"canvheight": 300,
# ...
}
低于这个 canvas 大小,滚动条出现。除了有一个软糖因素来解释 window chrome 我们可以在 setworldcoordinates()
:
self.screensize(wx-20, wy-20)
因此任何 window 420 x 320 或更大的尺寸在默认情况下都不应获得滚动条,除非 canvas 也进行了重新调整。
2) 通过"turtle.cfg"
文件操作_CFG
字典。与 turtle.pen()
方法动态创建的仿 _pd
笔字典不同,turtle._CFG
字典没有运行时用户界面,除非我们在引擎盖下四处寻找:
from turtle import Screen, Turtle, _CFG
TURTLE_SIZE = 20
TRIANGLE_SIZE = 120
_CFG.update({"canvwidth": 380, "canvheight": 380}) # 400 - 20
screen = Screen()
screen.setup(400, 400)
triangle = Turtle("triangle")
triangle.shapesize(TRIANGLE_SIZE / TURTLE_SIZE)
triangle.color("pink")
triangle.right(30)
screen.exitonclick()
3) 修补独立 turtle 的 _Root
class 的 setupcanvas
方法,用通用 Canvas
代替 ScrolledCanvas
。这消除了对任何幻数的需要,并且将简单地关闭滚动:
import tkinter as TK
from turtle import Screen, Turtle, _Root
def setupcanvas(self, width, height, cwidth, cheight):
self._canvas = TK.Canvas(self, width=cwidth, height=cheight)
self._canvas.pack(expand=1, fill="both")
_Root.setupcanvas = setupcanvas
TURTLE_SIZE = 20
TRIANGLE_SIZE = 120
screen = Screen()
screen.setup(400, 400)
# ...
已编辑
保证margin值尽可能小,会让canva的笛卡尔平面原点尽可能靠近屏幕中心。我有一个实用程序 class,我把它放在下面的 question 上,它有助于调整 window 的属性以找出 margin
我在学习 turtle
时遇到了这个问题。以下方法对我有用:
from turtle import Turtle
donatello = Turtle("turtle")
donatello.color("purple") # just to keep it real
screen = donatello.getscreen()
window_width = 200
window_height = 250
margin = 2 # minimum difference between window size and canvas size to avoid scrollbars
screen.screensize( # despite the name, screensize() does not change window/screen's size
canvwidth=window_width - margin, # named parameters give a hint of method's real goal
canvheight=window_height - margin) # canvas has to be smaller than window
screen.setup(window_width, window_height) # setup() will change window/screen's size
print(f"screensize(canvas) = {screen.screensize()}\n"
f"screen(width*height) = ({screen.window_width()} * {screen.window_height()})")
screen.exitonclick()
输出:
screensize(canvas) = (198, 248)
screen(width*height) = (200 * 250)
基本上就是保证canvas比屏幕尺寸小几个单位,谨防骗人的screensize()
方法