python - PyQt5:继承 QTextCodec
问题描述
我在 PyQt5(特别是 5.9.2,使用 Python 3.7)中创建 QTextCodec 的子类时遇到问题。
我创建了一个 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 答案,它们确实需要实例化才能注册。Jesse Hallam 对该答案的评论指出,在 C++ 中,编解码器必须用new
;实例化。但是 Python 并没有真正完成整个“堆栈”和“堆”的事情。
我应该如何进行?
解决方案
推荐阅读
- python - 在 Docker 映像中运行 Python 调试器
- java - 在不使用 && 或 || 的情况下如何编写此代码 操作员?
- python - 使用嵌套 while 循环的程序
- reactjs - Reactjs没有在foreach循环中定义渲染视图
- javascript - 如何使用 CSS 在每次闪烁时显示新文本
- django - Visual Studio Code 自动导入功能不起作用
- plot - 如何在 for 循环中使用 ComplexPortraits.jl 绘制多个图?
- pandas - 用 pandas 列中现有最大值和最小值之间的随机值替换 nan
- javascript - 如何检测 Safari 扩展中的历史状态变化?
- aws-java-sdk - java localstack lambada - 如何运行 lambada 并查看日志