I'm working on simple PyQt5 app which would allow me to edit some files like .xml, .txt
This is how it look right now:
Because I need to work with different files I decided to implement superclass which will found and return appropriate subclass depend on file extension.
class WidgetHandler:
def __new__(cls, path, parent=None):
ext = os.path.splitext(path)[1].replace('.', '')
for subclass in cls.__subclasses__():
if subclass.__name__.lower() == ext:
return super().__new__(subclass)
raise NotImplementedError
def __init__(self, parent, path):
self._path = path
self._parent = parent
self._is_modified = False
self._create()
def _create(self):
raise NotImplementedError
def _save(self):
raise NotImplementedError
def _close(self):
raise NotImplementedError
def save(self) -> None:
if self._is_modified:
self._save()
self._is_modified = False
def close(self) -> None:
if self._is_modified:
pass # TODO Запрос сохранения
self._close()
class XML(WidgetHandler, QTreeView):
def _create(self):
self.setParent(self._parent)
model = DomModel(self._path)
# model.dataChanged.connect(lambda: print('Data Changed'))
self.setModel(model)
self.expandAll()
self.setRootIsDecorated(False)
self.setItemsExpandable(False)
delegate = XMLDelegate()
self.setItemDelegate(delegate)
def _save(self):
pass
def _close(self):
pass
But instead of widget I get this exception: object.__new__(XML) is not safe, use QTreeView.__new__()
. Could someone please tell me, what am I doing wrong?