(意外)使用 setworldcoordinates() 时出现类型错误

(Unexpected) TypeError while using setworldcoordinates()

我正在尝试使用 Tkinter 创建一个 canvas 并在 Turtle Graphics 中使用自定义坐标。 setworldcoordinates() 方法接受四个参数,我照常进行。不确定为什么这里会出现 TypeError。

from tkinter import *
import turtle

master = Tk()
cv = Canvas(master, width = 200, height = 200)
screen = turtle.TurtleScreen(cv)

screen.setworldcoordinates(-50, -50, 50, 50)

这是我收到的错误消息:

Traceback (most recent call last):
  File "(file path)\temp.py", line 8, in <module>
    screen.setworldcoordinates(-50, -50, 50, 50)
  File "(file path)\turtle.py", line 1095, in setworldcoordinates
    self.screensize(wx-20, wy-20)
TypeError: unsupported operand type(s) for -: 'str' and 'int'

脚本名称不应与您正在导入的模块名称相同。 另见 following link

在深入研究源代码后,我发现它使用不同的方法来获取 Canvas 的大小。

如果 Canvas 未嵌入 window(未附加到 layout/geometry 管理器),则它使用

cv['width'], cv['height'] 

以字符串形式给出大小。

如果 Canvas 嵌入 window 则它使用

cv.winfo_width(), cv.winfo_height()

以数字形式给出大小

你必须使用

cv.pack()

cv.grid()

解决问题。

但它不适用于 cv.place()

from tkinter import *
import turtle

master = Tk()

cv = Canvas(master, width=200, height=200)
cv.pack() # <-- solution

screen = turtle.TurtleScreen(cv)

screen.setworldcoordinates(-50, -50, 50, 50)