PyQt5自定义QAction类

时间:2016-04-20 14:38:34

标签: python c++ qt python-3.x pyqt

努力减少混乱。我正在尝试创建自己继承自QAction的类。从我想要调用的QMainWindow重现以下代码:

class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()

        exitAction = QAction(QIcon('exit.png'), '&Exit', self)        
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(self.quit)

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAction)

正如您所看到的,我只是在菜单栏中添加动作。但我想让我的程序更面向对象。我希望以下是可能的:

from PyQt5.QtWidgets import QAction
from PyQt5.QtGui import QIcon

class exitAction(QAction):

    def __init__(self,parent):
        super.__init__(QIcon('exit.png'), '&Exit', parent)
        self.setShortcut('Ctrl+Q')
        self.setStatusTip('Exit application')
        self.triggered.connect(parent.quit)

通过以下方式调用exitAction类:

class MainWindow(QMainWindow):
     def __init__(self):

        #Create Menu
        self.menuBar = self.menuBar()

        #Add File Menu
        file_menu = self.menuBar.addMenu('&File')
        file_menu.addAction(exitAction(self))

这看起来很简单,但对我来说没有意义的是为什么近似等效的代码可以自行运行。

我得到的错误是TypeError: descriptor '__init__' requires a 'super' object but received a 'QIcon'。我自己设置的问题也可能是一个愚蠢的误解。如果我在C ++中工作,我只需传递一个引用MainWindow的指针。

1 个答案:

答案 0 :(得分:1)

我想你的问题在这里:

super.__init__(QIcon('exit.png'), '&Exit', parent)

你应该写super().而不是super.