Передача значения при нажатии на контекстное меню QAction

При срабатывании QACtion на лэйбле с содержимым хочу передавать его содержимое(i в моём примере) в аргумент функции, которая срабатывает на QAction.triggered.connect.

Получалось только через elf.sender().text(), но для этого нужно было в QAction вставлять это самое содержимое.

Как можно передать в triggered.connect аргумент text для функции?

# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets
import sys
from PyQt5.QtCore import Qt
from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication, QWidget, QAction, QLabel, QVBoxLayout, QScrollArea

class MyWin(QWidget):
    def __init__(self):
        super(QWidget, self).__init__()
        self.vbox = QVBoxLayout()
        self.vbox.addStretch(1)


        for i in range(10):
            label = QLabel()
            label.setText(str(i))

            label.setContextMenuPolicy(Qt.ActionsContextMenu)
            print_action = QAction('Принтануть', self)
            print_action.triggered.connect(self.print_label_text)
            label.addAction(print_action)

            self.vbox.addWidget(label)


        self.scrollarea = QScrollArea(self)
        self.scrollarea.resize(self.width(), self.height())
        self.area = QWidget()
        self.area.setLayout(self.vbox)
        self.scrollarea.setWidget(self.area)

    def print_label_text(self, text):
        print(text)
        print('success')

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = MyWin()
    w.show()
    sys.exit(app.exec_())


Ответы (1 шт):

Автор решения: S. Nick

[signal]void QAction::triggered(bool checked = false)

Этот сигнал испускается, когда действие активируется пользователем; например, когда пользователь щелкает опцию меню, кнопку на панели инструментов или нажимает сочетание клавиш действия, или когда вызывался trigger(). Примечательно, что он не генерируется при вызове setChecked() или toggle().

Если действие является проверяемым, флажок true, если действие проверено, или false, если действие не отмечено.

import sys
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QAction, QLabel, QVBoxLayout, QScrollArea

class MyWin(QWidget):
    def __init__(self):
        super(QWidget, self).__init__()
        self.vbox = QVBoxLayout()
        self.vbox.addStretch(1)


        for i in range(10):
            label = QLabel()
            label.setText(str(i))

            label.setContextMenuPolicy(Qt.ActionsContextMenu)
            print_action = QAction('Принтануть', self)

#            print_action.triggered.connect(self.print_label_text)
            print_action.triggered.connect(lambda ch, text=label.text(): self.print_label_text(text))

            label.addAction(print_action)

            self.vbox.addWidget(label)

        self.scrollarea = QScrollArea(self)
        self.scrollarea.resize(self.width(), self.height())
        self.area = QWidget()
        self.area.setLayout(self.vbox)
        self.scrollarea.setWidget(self.area)

    def print_label_text(self, text):
        print(text)
        print('success')


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = MyWin()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка