Python 新手似乎无法正确继承 PyQt4 小部件
Python newbie can't seem to properly subclass a PyQt4 widget
我是一个 Python 新手,似乎无法在 PyQt4 中正确地子class 一个小部件。最初我创建了一个 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)
效果很好。现在,我想 subclass QDockWidget。我创建一个名为 "ToolWindows.py" 的新文件并向其中添加以下 class:
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 个)”。有人能解释一下我在这里做错了什么吗,有人能给我指点一下在线 subclassing 的一个很好的解释吗?我自己没有成功找到一个。谢谢!
def __init__(self, parent=NONE):
它只有 2 个参数。另外,当你这样做时
toolWindow1 = BasicToolWindow("Tool Window 1", self)
它将"self" 隐含地提供给参数。所以你剩下的只是你用 "Tool Window 1."
填充的父参数
基本上,您为 BasicToolWindow 提供了三个参数:self、"Tool Window 1" 和 self。这就是编译器不满意的原因。
QDockWidget class 有两个构造函数。一个取 title、parent 和 flags,而另一个只取 parent 和 flags。如果您想在创建 BasicToolWindow
subclass 的实例时使用这些参数,您需要在其 __init__
:
的签名中定义它们
class BasicToolWindow(QDockWidget):
def __init__(self, title, parent=None):
parent 参数在 QDockWidget
C++ 构造函数中是可选的,默认为 NULL
(即没有 parent) - 所以添加了 parent=None
的 PyQt 等价物来匹配它。 flags 参数被省略,因为很少需要它,Qt 已经提供了默认值。
然后需要通过 super
将这些参数传递给 base-class __init__
,以便 QDockWidget
构造函数获得它期望的参数:
class BasicToolWindow(QDockWidget):
def __init__(self, title, parent=None):
super(BasicToolWindow, self).__init__(title, parent)
现在,当您创建 BasicToolWindow
时,基础 dock-widget 的标题已设置,并且 main-window(即 self
)成为其 parent:
toolWindow1 = BasicToolWindow("Tool Window 1", self)
我是一个 Python 新手,似乎无法在 PyQt4 中正确地子class 一个小部件。最初我创建了一个 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)
效果很好。现在,我想 subclass QDockWidget。我创建一个名为 "ToolWindows.py" 的新文件并向其中添加以下 class:
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 个)”。有人能解释一下我在这里做错了什么吗,有人能给我指点一下在线 subclassing 的一个很好的解释吗?我自己没有成功找到一个。谢谢!
def __init__(self, parent=NONE):
它只有 2 个参数。另外,当你这样做时
toolWindow1 = BasicToolWindow("Tool Window 1", self)
它将"self" 隐含地提供给参数。所以你剩下的只是你用 "Tool Window 1."
填充的父参数基本上,您为 BasicToolWindow 提供了三个参数:self、"Tool Window 1" 和 self。这就是编译器不满意的原因。
QDockWidget class 有两个构造函数。一个取 title、parent 和 flags,而另一个只取 parent 和 flags。如果您想在创建 BasicToolWindow
subclass 的实例时使用这些参数,您需要在其 __init__
:
class BasicToolWindow(QDockWidget):
def __init__(self, title, parent=None):
parent 参数在 QDockWidget
C++ 构造函数中是可选的,默认为 NULL
(即没有 parent) - 所以添加了 parent=None
的 PyQt 等价物来匹配它。 flags 参数被省略,因为很少需要它,Qt 已经提供了默认值。
然后需要通过 super
将这些参数传递给 base-class __init__
,以便 QDockWidget
构造函数获得它期望的参数:
class BasicToolWindow(QDockWidget):
def __init__(self, title, parent=None):
super(BasicToolWindow, self).__init__(title, parent)
现在,当您创建 BasicToolWindow
时,基础 dock-widget 的标题已设置,并且 main-window(即 self
)成为其 parent:
toolWindow1 = BasicToolWindow("Tool Window 1", self)