2016-11-27 4 views
1

Я не знаком с путями python, я видел несколько других вопросов здесь с похожим описанием, но не смог исправить это.AttributeError: Экземпляр меню не имеет атрибута '__len__'

Ошибка:

Traceback (most recent call last): 
File "C:/Users/UT/PycharmProjects/tkinter/python_PET/main.py", line 16, in <module> 
    m = menu_bar_class(root) 
File "C:/Users/UT/PycharmProjects/tkinter/python_PET/main.py", line 14, in __init__ 
    self.master.config(self.menu) 
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1326, in configure 
    return self._configure('configure', cnf, kw) 
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1312, in _configure 
    cnf = _cnfmerge(cnf) 
File "C:\Python27\lib\lib-tk\Tkinter.py", line 114, in _cnfmerge 
    for c in _flatten(cnfs): 
AttributeError: Menu instance has no attribute '__len__' 

Программа:

from Tkinter import * 
from tkFileDialog import * 
import tkMessageBox 
import ttk 
root = Tk() 

class menu_bar_class: 

    def __init__(self,master): 
     self.master = master 
     print("menu bar") 

     self.menu = Menu(self.master) 
     self.master.config(self.menu) 

m = menu_bar_class(root) 
root.mainloop() 

ответ

5

Вам необходимо пройти в меню в качестве ключевого слова аргумент:

self.master.config(menu=self.menu) 

Когда вы передаете в позиционной аргумента (поэтому без части menu=), тогда Tkin ter рассчитывает получить либо словарь с конфигурацией (так {'menu': self.menu}), либо последовательность, содержащую больше последовательностей или словарей. Поскольку self.menu не является ни тем, вы получаете сообщение об ошибке.

Смежные вопросы