python - tkinter 对象上的 list() 方法失败
问题描述
在将 tkinter 对象(或多个)包装在列表中时,使用方括号运算符[]
与list()
构造函数之间似乎存在差异:
在 1:
>>> import tkinter as tk
>>> list(tk.Entry())
输出 1:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Python36\lib\tkinter\__init__.py", line 1486, in cget
return self.tk.call(self._w, 'cget', '-' + key)
TypeError: must be str, not int
在 2:
>>> [tk.Entry()]
输出 2:
[<tkinter.Entry object .!entry2>]
考虑到type(tk.Entry())
产量<class 'tkinter.Entry'>
符合预期,而不是int
. 提前致谢。
解决方案
正如您在评论中被告知的那样,list(x)
并且[x]
不一样。
报告错误的性质更有趣。当您尝试将 an 转换Entry
为列表时,list()
请__getitem__
从Entry
. 无论出于何种原因,此方法都作为别名实现Entry.cget()
:
x = tk.Entry()
x.cget == x.__getitem__
#True
因此,list(x)
调用x.__getitem__(0)
以获取预期可迭代的第一个元素。反过来,这会调用x.cget(0)
; 这反过来又会尝试获取小部件配置选项的值'-' + 0
。后一个操作无效并导致您观察到的错误消息。
推荐阅读
- batch-file - 如何使用不以下划线开头的批处理文件复制文件夹?
- java - 将 spring-boot 应用程序的 http 端点发送到 elasticsearch
- r - 为 dyads 创建唯一 ID。非定向
- javascript - 如何在 App Script 中正确使用 setFormula
- python - 如何将 2d numpy.array 或 Qobj 重塑为 dims=[[2,2],[2,2]]
- php - 将具有索引和值的数组转换为数组
- c# - 在 C# 或 Unity 中执行 Python 脚本
- operator-keyword - 归纳假设和算子 %
- c++ - 大家好,当一个类有一个向量作为它的数据成员时,为什么它的大小总是24?
- docker - TensorFlow 通过 docker 服务多个模型