努力减少混乱。我正在尝试创建自己继承自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的指针。
答案 0 :(得分:1)
我想你的问题在这里:
super.__init__(QIcon('exit.png'), '&Exit', parent)
你应该写super().
而不是super.