窗口随Python Turtle setworldcoordinates()移动
我注意到,在使用窗口随Python Turtle setworldcoordinates()移动,python,turtle-graphics,Python,Turtle Graphics,我注意到,在使用Screen.setworldcoordinates()时,Python海龟图形出现了一个奇怪的亮点。出于某种原因,当我在运行下面的代码后单击窗口标题栏时,窗口的内容有一个小的但可以感觉到的变化。有谁能解释一下这种现象,并告诉我是否有办法避免它?我使用的是Windows10和Python3.8 import turtle screen = turtle.Screen() screen.setup(500, 500) # Set the dimensions of the Tu
Screen.setworldcoordinates()
时,Python海龟图形出现了一个奇怪的亮点。出于某种原因,当我在运行下面的代码后单击窗口标题栏时,窗口的内容有一个小的但可以感觉到的变化。有谁能解释一下这种现象,并告诉我是否有办法避免它?我使用的是Windows10和Python3.8
import turtle
screen = turtle.Screen()
screen.setup(500, 500) # Set the dimensions of the Turtle Graphics window.
screen.setworldcoordinates(0, screen.window_height(), screen.window_width(), 0)
my_turtle = turtle.Turtle(shape="circle")
my_turtle.color("red")
my_turtle.forward(10)
turtle.done()
海龟有自己的显示器,它使用显示器宽度的50%,高度的75%
_CFG = {"width" : 0.5, # Screen
"height" : 0.75,
"canvwidth" : 400,
"canvheight": 300,
...
}
在施工过程中,各种元素之间存在一些相互作用
self._canvas = TK.Canvas(master, width=width, height=height,
bg=self.bg, relief=TK.SUNKEN, borderwidth=2)
将borderwidth
设置为3以上的任何值都可以减轻此问题;相信这是因为它需要一个完整的屏幕重画。然而,
/usr/lib/python3.9/turtle.py
是只读的
使用write priv创建本地副本,然后为调试目的对其进行修改。取而代之的是命名,只是为了将更改分开。输入一些print()
语句以确定函数何时运行
方法1: 在构建屏幕之前,您可以通过强制新值来修复它。
通过在与脚本相同的目录中提供自己的
turtle.cfg
,或者
方法2: 覆盖这些值:
import turtle
Width, Height = 500, 500
turtle._CFG['canvwidth'], turtle._CFG['canvheight'] = Width, Height
screen = turtle.Screen()
方法3:
\u setscrollregion(self、srx1、sry1、srx2、sry2)
调用\u重缩放(self、xscalefactor、yscalefactor)
但在拖动标题栏后,直到调用了onResize(self,event)
之前,不要调用adjustScrolls(self)
因此,您可以在屏幕之后强制重新绘制。setworldcoordinates(0,高度,宽度,0)
取消注释
##
以启用行,然后重试
#! /usr/bin/python3
import turtle
## print( turtle._CFG['width'], turtle._CFG['height'] ) ## 0.5 0.75
## print( turtle._CFG['canvwidth'], turtle._CFG['canvheight'] ) ## 400 300
Width, Height = 500, 500
## turtle._CFG['width'], turtle._CFG['height'] = Width, Height
## turtle._CFG['canvwidth'], turtle._CFG['canvheight'] = Width, Height
screen = turtle.Screen()
screen.setworldcoordinates(0, Height, Width, 0)
## cv = screen.getcanvas()
## cv.adjustScrolls()
my_turtle = turtle.Turtle(shape='circle')
my_turtle.color('red')
my_turtle.forward(10)
def click_callback( x, y ):
cv = screen.getcanvas()
print( cv.width, cv.height, screen.screensize(), cv.winfo_width(), cv.winfo_height() )
print('<< initialized >>')
screen.onclick( click_callback )
screen.mainloop()
#/usr/bin/python3
进口海龟
##打印(乌龟._-CFG['width'],乌龟._-CFG['height'])0.50.75
##打印(turtle._CFG['canvwidth'],turtle._CFG['canvheight'])##400 300
宽度,高度=500500
##乌龟。_CFG['width'],乌龟。_CFG['height']=宽度,高度
##海龟。_CFG['canvwidth',海龟。_CFG['CanvHight']=宽度、高度
screen=turtle.screen()
屏幕。设置世界坐标(0,高度,宽度,0)
##cv=screen.getcanvas()
##cv.adjustScrolls()
我的乌龟=乌龟。乌龟(shape='circle')
我的乌龟。颜色(“红色”)
我的乌龟前进(10)
def click_回调(x,y):
cv=screen.getcanvas()
打印(cv.width、cv.height、screen.screensize()、cv.winfo_width()、cv.winfo_height())
打印(“>”)
screen.onclick(单击\u回调)
screen.mainloop()
这在我的系统macOS Mojave上不会发生,因此可能与操作系统有关。
#! /usr/bin/python3
import turtle
## print( turtle._CFG['width'], turtle._CFG['height'] ) ## 0.5 0.75
## print( turtle._CFG['canvwidth'], turtle._CFG['canvheight'] ) ## 400 300
Width, Height = 500, 500
## turtle._CFG['width'], turtle._CFG['height'] = Width, Height
## turtle._CFG['canvwidth'], turtle._CFG['canvheight'] = Width, Height
screen = turtle.Screen()
screen.setworldcoordinates(0, Height, Width, 0)
## cv = screen.getcanvas()
## cv.adjustScrolls()
my_turtle = turtle.Turtle(shape='circle')
my_turtle.color('red')
my_turtle.forward(10)
def click_callback( x, y ):
cv = screen.getcanvas()
print( cv.width, cv.height, screen.screensize(), cv.winfo_width(), cv.winfo_height() )
print('<< initialized >>')
screen.onclick( click_callback )
screen.mainloop()