PyQt5: создание подкласса QTextCodec

У меня возникают проблемы с созданием подкласса QTextCodec в PyQt5 (в частности, 5.9.2, используя Python 3.7).

Я создал MWE, демонстрирующий проблему. Выполняем следующий код:

# -*- coding: utf-8 -*-

from PyQt5.QtCore import QTextCodec

class MyCodec(QTextCodec):
    def __init__(self):
        super().__init__()
        self.inner_codec = QTextCodec.codecForName('UTF-8')

    def name(self):
        return b'My' + self.inner_codec.name()

    def aliases(self):
        return [b'My' + alias for alias in self.inner_codec.aliases()]

    def mibEnum(self):
        return self.inner_codec.mibEnum()

    def convertFromUnicode(self, input, number, state):
        return self.inner_codec.convertFromUnicode(input, number, state)

    def convertToUnicode(self, chars, len, state):
        return self.inner_codec.convertToUnicode(chars, len, state)

if __name__ == '__main__':
    def main():
        codec = QTextCodec.codecForName('MyUTF-8')
        assert codec is None # MyUTF-8 not found!

        mycodec = MyCodec() # error here
        print(mycodec.fromUnicode('hello world!'))

    main()

выдает ошибку

TypeError: PyQt5.QtCore.QTextCodec cannot be instantiated or sub-classed

QTextCodecs, по-видимому, особый вид зверя, где Qt берет на себя ответственность за их создание. Однако, согласно этому ответу Stackru, для регистрации их необходимо создать. В комментарии к этому ответу Джесси Халлама говорится, что в C++ кодек должен быть создан с помощьюnew; но Python на самом деле не делает всего "стека" и "кучи".

Как мне продолжить?

0 ответов

Другие вопросы по тегам