Qt:多个菜单共享相同的操作,但连接到不同的插槽



我有两个具有相同操作的菜单。但我想根据菜单将它们连接到不同的插槽。我能做到吗?

下面的代码无法做到这一点,而是将操作连接到两个插槽。

我可以创建一组具有相同名称的不同操作。我想知道是否有不同的方法可以在不重复所有操作的情况下做到这一点。

import sys
from PyQt5 import QtWidgets, QtGui, QtCore

class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
centralWidget = QtWidgets.QWidget()
layout = QtWidgets.QVBoxLayout()
centralWidget.setLayout(layout)
self.setCentralWidget(centralWidget)
self.menuBar = QtWidgets.QMenuBar(self)
layout.addWidget(self.menuBar)
self.log = QtWidgets.QTextEdit()
layout.addWidget(self.log)        
fileMenu = self.menuBar.addMenu('File')
editMenu = self.menuBar.addMenu('Edit')
actions = []
for i in range(5):
action = QtWidgets.QAction('{}'.format(i), self)
actions.append(action)
fileMenu.addActions(actions)
editMenu.addActions(actions)
fileMenu.triggered.connect(self.file_action_triggered)
editMenu.triggered.connect(self.edit_action_triggered)
def file_action_triggered(self, action):
print('File', action.text())
self.log.append('File' + action.text())
def edit_action_triggered(self, action):
print('Edit', action.text())
self.log.append('Edit' + action.text())

def main():
app = QtWidgets.QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())

if __name__ == '__main__':
main()

运行上面的代码时,单击"文件 - 1",我只期望

File1

要打印。相反,它会打印

File1
Edit1

您尚未创建具有相似名称的 QActions,这些 QActions 已将相同的 QActions 分配给 2 QMenus。您应该做的是使用相同的文本创建 2 个 QActions,并将每个 QActions 分配给不同的 QMenu。

例如:

for i in range(5):
fileMenu.addAction(QtWidgets.QAction('{}'.format(i), self))
editMenu.addAction(QtWidgets.QAction('{}'.format(i), self))

最新更新