python - (意外)使用 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'
解决方案
在挖掘源代码后,我发现它使用不同的方法来获取 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)
推荐阅读
- d - 如何将字符串类型转换为字符数组
- transactions - 区块链内存池的“未确认交易”是否分布在节点上?
- c - 从另一个链表中创建一个具有“可被 3 整除”数字的链表的 C 函数
- reactjs - npm run build 无论如何都挂起,无法升级 webpack
- protocol-buffers - 如何就地修改序列化的 protobuf 字节数组?
- android - 警告对话框代码未在 if else 语句android中执行
- javascript - 模拟更改不适用于 formik 的选择元素
- javascript - React-Table 不呈现数据
- html - Google Lighthouse 的 Tap Target Spacing 功能的可靠性如何?
- typescript - 如何向 TypesScript 类添加动态属性并保持正确的类型