将 C++ class 移植到 PyQt

Port C++ class to PyQt

我正在尝试将用 C++ 编写的 Qt4 自定义小部件转换为 Python 2.7 自定义小部件。但是,我一直没弄明白QLabel(parent)怎么写成Python。这是来自“.ccp”文件的原始 C++ 代码:

DocumentWidget::DocumentWidget(QWidget *parent)
    : QLabel(parent)
{
    currentPage = -1;
    setAlignment(Qt::AlignCenter);
}

QLabel(parent) 似乎是某种初始化列表。我尝试在 Python 中并行使用多重继承,但这会导致以下错误:Cannot create a consistent method resolution order (MRO) for bases QLabel, QWidget.

我正在尝试移植代码而不是为 C++ 小部件创建包装器,因为我不了解 C++,并且认为我将来必须进一步自定义小部件。

我没有接受过程序员培训,这是我 运行 进入 C++ 的第一天,所以即使我做的事情很傻,也请随时纠正我。我不会感到尴尬。

该代码为 DocumentWidget class 定义了一个构造函数,它继承了 QLabel 并且需要一个 QWidget 作为父对象。

等效的 PyQt 代码为:

from PyQt4 import QtCore, QtGui

class DocumentWidget(QtGui.QLabel):
    def __init__(self, parent):
        super(DocumentWidget, self).__init__(parent)
        # or QtGui.QLabel.__init__(self, parent)
        self.currentPage = -1
        self.setAlignment(QtCore.Qt.AlignCenter)

多重继承有效,但基础 类 必须以正确的顺序调用(即 DocumentWidget(QLabel, QWidget) 而不是 DocumentWidget(QLabel, QWidget))。

完整:

from PyQt4.QtCore import *
from PyQt4.QtGui import *

class DocumentWidget(QLabel, QWidget):
    def __init__(self, parent=None):
        super(DocumentWidget, self).__init__()
        self.currentPage = -1
        self.setAlignment(Qt.AlignCenter)