首页 > 解决方案 > (意外)使用 setworldcoordinates() 时出现类型错误

问题描述

我正在尝试使用 Tkinter 创建一个带有自定义坐标的画布,以便在 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'

标签: pythontkinterturtle-graphics

解决方案


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

如果Canvas未嵌入窗口中(未附加到布局/几何管理器),则它使用

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

它将大小作为字符串。

如果Canvas嵌入在窗口中,那么它使用

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)

推荐阅读