将 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)
我正在尝试将用 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)