Python新手似乎无法正确地子类化PyQt4小部件

时间:2017-06-18 21:43:35

标签: python pyqt4

我是一个Python新手,似乎无法在PyQt4中正确地子类化小部件。最初我创建了一个QDockWidget对象并将其添加到MainWindow,如下所示:

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

class MainWindow(QMainWindow):

    def __init__(self, parent=NONE):
        toolWindow1 = QDockWidget("Tool Window 1", self)
        self.addDockWidget(Qt.LeftDockWidgetArea, toolWindow1)

工作得很好。现在,我想继承QDockWidget。我创建了一个名为“ToolWindows.py”的新文件,并将以下类添加到其中:

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

class BasicToolWindow(QDockWidget):

    def __init__(self, parent=NONE):
        super(BasicToolWindow, self).__init__(parent)

然后我尝试在MainWindow中创建它,如下所示:

toolWindow1 = BasicToolWindow("Tool Window 1", self)

这会在运行时导致以下错误:“ init ()最多需要2个参数(给定3个)”。有人可以解释一下我在这里做错了什么,有人还能指出我对在线子类化的一个很好的解释吗?我自己找不到一个。谢谢!

2 个答案:

答案 0 :(得分:1)

def __init__(self, parent=NONE):

它只有2个参数。此外,当你做

toolWindow1 = BasicToolWindow("Tool Window 1", self)

它会给论证隐含“自我”。所以你剩下的就是你用“工具窗口1”填充的父参数。

基本上,你给了BasicToolWindow三个参数:self,“Tool Window 1”和self。这就是编译器不满意的原因。

答案 1 :(得分:1)

QDockWidget类有两个构造函数。一个需要标题标志,而另一个只需标志< / em>的。如果要在创建BasicToolWindow子类的实例时使用这些参数,则需要在其__init__的签名中定义它们:

class BasicToolWindow(QDockWidget):
    def __init__(self, title, parent=None):

parent 参数在QDockWidget C ++构造函数中是可选的,默认为NULL(即没有父级) - 因此添加了等同于parent=None的PyQt匹配这个。 flags 参数被省略,因为它很少需要,并且Qt已经提供了默认值。

然后需要通过__init__将这些参数传递给基类super,以便QDockWidget构造函数获取它所期望的参数:

class BasicToolWindow(QDockWidget):
    def __init__(self, title, parent=None):
        super(BasicToolWindow, self).__init__(title, parent)

现在,当您创建BasicToolWindow时,将设置基础dock-widget的标题,并且主窗口(即self)将成为其父级:

toolWindow1 = BasicToolWindow("Tool Window 1", self)