简单的tkinker程序,它生成一个我以前没见过的错误:TypeError: object of type: 'Frame' has no len()
我完全不知道为什么会出现这个错误,我也不知道这意味着什么。
def gui ():
window = tk.Tk()
window.title('DudzRPG ' + version)
#frames
options = tk.Frame()
options1 = tk.Frame()
options2 = tk.Frame()
#widgets
image = tk.Canvas(bg='blue')
opt1=tk.Button()
opt2=tk.Button()
opt3=tk.Button()
opt4=tk.Button()
#packs
image.pack()
options.pack()
options1.pack()
options2.pack()
opt1.pack(options1)
opt2.pack(options1)
opt3.pack(options2)
opt4.pack(options2)
window.mainloop()
该错误似乎来自:
options1 = tk.Frame()
options2 = tk.Frame()
因为上面几行完全一致,所以不能给我看:
options = tk.Frame()
这里是追溯:
Traceback (most recent call last):
File "<string>", line 250, in run_nodebug
File "C:\Users\I.S.B\Google Drive\Dudzo inc python workspace\project\python thing.py", line 56, in <module>
gui()
File "C:\Users\I.S.B\Google Drive\Dudzo inc python workspace\project\python thing.py", line 43, in gui
opt1.pack(options1)
File "C:\Python33\Lib\tkinter\__init__.py", line 1909, in pack_configure
+ self._options(cnf, kw))
File "C:\Python33\Lib\tkinter\__init__.py", line 1108, in _options
cnf = _cnfmerge(cnf)
File "C:\Python33\Lib\tkinter\__init__.py", line 105, in _cnfmerge
for c in _flatten(cnfs):
TypeError: object of type 'Frame' has no len()
我的问题是,错误意味着什么,我该如何解决它?
答案 0 :(得分:4)
您未正确调用pack
- 有关文档,请参阅here。抛出错误是因为pack
函数不将窗口小部件作为位置参数。
您似乎错误地认为,pack
函数的工作是指定哪个窗口小部件是哪个窗口小部件的子窗口。实际上,在创建窗口小部件时,必须告诉窗口小部件它的父窗口是什么。以下是解决方法:
创建小部件时,第一个参数应该是小部件的预期父小部件:
opt1=tk.Button(options1)
opt2=tk.Button(options1)
opt3=tk.Button(options2)
opt4=tk.Button(options2)
然后,当你打包它们时,他们已经知道它们属于哪个小部件:
opt1.pack()
opt2.pack()
opt3.pack()
opt4.pack()
如果你忘记了,你需要开始GUI的主循环:
window.mainloop()