2017-07-20 7 views
0

同じアクションの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 

を印刷することを期待します。代わりに、それが印刷されます

+0

ご質問は不明である、説明してください。 – eyllanesc

+0

2つのQMenusに同じQActionを割り当てた同様の名前のQActionsを作成していません。あなたがしたい問題を超えて? – eyllanesc

+0

私は「すべてのアクションを複製せずにそれを行うための別の方法があるかどうか」を知りたいです。私は間違いなく以前に作成したアクションと全く同じように見える別のアクションを作成することができます。しかし、シグナル(アクション自体ではなく)を出すのはメニューなので、何とかスロットがどのメニューから信号を発するかを知ることができますか? – azalea

答えて

0

2 QMenusに同じQActionを割り当てた同様の名前のQActionsを作成していません。あなたがするべきことは、同じテキストで2つのQActionsを作成し、それぞれを別のQMenuに割り当てることです。例えば

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

信号を発するオブジェクトはメニューではなく、QActionsなので、あなたが言うことはできません。 – eyllanesc

関連する問題