'All positional arguments are passed to QTableWidget.__init__().
**Keyword Arguments**
editable              (bool) If True, cells in the table can be edited
by the user. Default is False.
sortable              (bool) If True, the table may be soted by
clicking on column headers. Note that this also
causes rows to appear initially shuffled until
a sort column is selected. Default is True.
*(added in version 0.9.9)*'

def __init__(self, *args, **kwds):

    QtGui.QTableWidget.__init__(self, *args)
    self.itemClass = TableWidgetItem
    self.setVerticalScrollMode(self.ScrollPerPixel)
    self.setSelectionMode(QtGui.QAbstractItemView.ContiguousSelection)
    self.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
    self.clear()
    kwds.setdefault('sortable', True)
    kwds.setdefault('editable', False)
    self.setEditable(kwds.pop('editable'))
    self.setSortingEnabled(kwds.pop('sortable'))
    if (len(kwds) > 0):
        raise TypeError(("Invalid    keyword    arguments    '%s'" % kwds.keys()))
    self._sorting = None
    self._formats = {None: None}
    self.sortModes = {}
    self.itemChanged.connect(self.handleItemChanged)
    self.contextMenu = QtGui.QMenu()
    self.contextMenu.addAction('Copy    Selection').triggered.connect(self.copySel)
    self.contextMenu.addAction('Copy    All').triggered.connect(self.copyAll)
    self.contextMenu.addAction('Save    Selection').triggered.connect(self.saveSel)
    self.contextMenu.addAction('Save    All').triggered.connect(self.saveAll)
