#python-3.x #pyqt5 #contextmenu #qpushbutton #qaction
#python-3.x #pyqt5 #contextmenu #qpushbutton #qaction
Вопрос:
Я создал функцию меню, вызываемую правой кнопкой мыши, в которой все функции, вызываемые правой кнопкой мыши, связаны с QAction
Например:
self.contextMenu = QtWidgets.QMenu(self)
self.contextMenu.addAction(self.actionAdd_Data)
self.pushButton.customContextMenuRequested.connect(self.initContextMenu)
def initContextMenu(self, event):
action = self.contextMenu.exec_(self.pushButton.mapToGlobal(event))
if action == self.actionAdd_Data:
print("Do something")
Возможно ли, что я могу эмулировать нажатие правой кнопки мыши? Что-то вроде PushButton.click(), но вместо этого для QAction.
Я пробовал
self.pushButton2.clicked.connect(self.actionAdd_Data.trigger)
Но ничего не происходит.
Кто-нибудь может помочь? Спасибо.
Комментарии:
1.
trigger()
Подключен ли каким-либо образом сигнал этого действия или вы просто добавляете его в меню?2. @musicamante я действительно не понимаю, но я не думаю, что сигнал trigger () подключен.
Ответ №1:
Хотя использование возвращаемого действия из QMenu.exec_()
работает нормально для меню, созданных «на лету», общее (и предпочтительное) использование QAction заключается в том, чтобы что-то делать, когда выдается их triggered()
сигнал.
Это позволяет сохранить одно QAction, которое всегда выполняет то, для чего оно было создано, при этом имея возможность добавлять это действие везде, где это необходимо (может быть меню, панель инструментов или даже сочетание клавиш), без постоянной проверки, было ли запущено это действие.
В следующем примере addData()
функция вызывается как при ее активации из меню, так и при нажатии какой-либо другой кнопки.
self.actionAdd_Data = QAction('Add data', self)
self.actionAdd_Data.triggered.connect(self.addData)
self.contextMenu.addAction(self.actionAdd_Data)
# ...
self.someOtherButton.clicked.connect(self.actionAdd_Data.trigger)
def initContextMenu(self, pos):
self.contextMenu.exec_(self.pushButton.mapToGlobal(pos))
def addData(self):
# do something