同じアクションの2つのメニューがあります。しかし、私はそれらのメニューに応じて異なるスロットに接続したいと思います。それをしてもいいですか?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
を印刷することを期待します。代わりに、それが印刷されます
ご質問は不明である、説明してください。 – eyllanesc
2つのQMenusに同じQActionを割り当てた同様の名前のQActionsを作成していません。あなたがしたい問題を超えて? – eyllanesc
私は「すべてのアクションを複製せずにそれを行うための別の方法があるかどうか」を知りたいです。私は間違いなく以前に作成したアクションと全く同じように見える別のアクションを作成することができます。しかし、シグナル(アクション自体ではなく)を出すのはメニューなので、何とかスロットがどのメニューから信号を発するかを知ることができますか? – azalea