PyQt5: создание подкласса QTextCodec - PullRequest
0 голосов
/ 27 марта 2020

У меня проблемы при создании подкласса QTextCode c в 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 становится владельцем их создания. В соответствии с этим StackOverflow ответом , однако, они должны быть созданы для регистрации. В комментарии к этому ответу Джесси Халлам говорится, что в C ++ код c должен быть создан с помощью new; но Python на самом деле не делает всего "стека" и "кучи".

Как мне поступить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...