窗口随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()