使用PyQt4中的QPushbutton / QWidget对类继承的基本理解

时间:2015-08-04 09:54:36

标签: python-2.7 oop pyqt4

这是我猜的基本OOP理解问题。但是:而不是

class MyWidget(QtGui.QWidget):

    def __init__(self):
        """

        Parameters
        ----------

        """
        QtGui.QWidget.__init__(self)
        button = QtGui.QPushButton(self)
        ...

我想要自定义按钮,继承如下:

class MyButton(QtGui.QPushButton):
    def __init__(self):
    ...

所以,我可以用它代替:

class MyWidget(QtGui.QWidget):

    def __init__(self):
        """

        Parameters
        ----------

        """
        QtGui.QWidget.__init__(self)
        button = MyButton(self)
        ...

问题是,我不知道如何使按钮成为Widget的对象,因为我无法传递小部件本身?在此先感谢

2 个答案:

答案 0 :(得分:0)

这两种情况都做同样的事情:您在button的{​​{1}}函数中创建__init__,一个类的实例。

问题是,您无法在任何其他功能中使用MyWidget,因为它超出了范围。您没有将其定义为类属性,您只将其定义为此特定函数的局部变量 要将button作为button的属性,您必须使用关键字MyWidget

self

稍后,您将可以执行self.button=MyButton() 之类的操作。您还可以使用myWidget.button.someFunction..的任何其他方法拨打self.button

你们有些混淆可能来自PyQt。

MyWidget

使用上面的代码,您将作为参数button = QtGui.QPushButton(self) 传递(在您的情况下,self指的是self)。这实际上是针对Qt的,目的是将myWidget设置为myWidget的父级。

button似乎是多余的,但第一个self.button = QtGui.QPushButton(self)用于python,第二个用于Qt(用于C ++)。

最后,您应该使用父参数进行子类化:

self

答案 1 :(得分:0)

像这样工作:

class MyPushButton(QtGui.QPushButton):
    def __init__(self, *args):
        QtGui.QPushButton.__init__(self, *args)

要真正理解这一点,我可能会在PyQt参考中找到答案