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

2024-04-20 11:09:59 发布

您现在位置:Python中文网/ 问答频道 /正文

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

下面的代码无法执行此操作,相反,它将操作连接到两个插槽。在

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

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()

当运行上面的代码,并单击“File-1”时,我只期望

^{pr2}$

待打印。而是打印出来的

File1
Edit1

Tags: textselflogactionsdefsysactionfile
1条回答
网友
1楼 · 发布于 2024-04-20 11:09:59

您没有创建具有相似名称的QActions,它们将相同的QActions分配给2个qmenu。您应该做的是用相同的文本创建2个QActions,并将每个QActions分配给不同的QMenu。在

例如:

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

相关问题 更多 >