我是一个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个)”。有人可以解释一下我在这里做错了什么,有人还能指出我对在线子类化的一个很好的解释吗?我自己找不到一个。谢谢!
答案 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)