0
我有兩個具有相同動作的菜單。但是我想根據菜單將它們連接到不同的插槽。我可以這樣做嗎?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
你的問題不清楚,請解釋。 – eyllanesc
您尚未創建具有相同名稱的QActions,它們將相同的QActions分配給2個QMenus。除了這個問題你想要做什麼? – eyllanesc
我很想知道「是否有不同的方法來做到這一點,而不需要重複所有的動作」。我完全可以創建另外n個與我之前創建的n個動作完全相同的動作。但是,由於它是發出信號的菜單(不是動作本身),我能否以某種方式讓插槽知道信號從哪個菜單中刪除? – azalea