在 PySide 中单击的 QMenu 项目的打印文本

Print text of QMenu item clicked in PySide

如何打印在 pyside 菜单中单击的菜单项的显示文本?

import sys
import os
from PySide import QtGui, QtCore
from PySide import QtGui as QtWidgets


class MyTool(QtWidgets.QWidget):
    def __init__(self,parent=None, path=None):
        super(MyTool, self).__init__(parent)
        self.resize(300,200)

        # controls
        self.ui_filters = QtGui.QToolButton()
        self.ui_filters.setText('Filters  ')

        main_layout = QtWidgets.QVBoxLayout()
        main_layout.addWidget(self.ui_filters)

        self.setLayout(main_layout)

        # actions
        self.create_actions()

    # properties
    def create_actions(self):
        # filters menu
        self.menu_filters = QtWidgets.QMenu(self)
        filters = ['Asphalt','Ceramic','Concrete','Fabric','Ground','Granite','Leather']
        for x in filters:
            action = self.menu_filters.addAction(x)
        self.ui_filters.setMenu(self.menu_filters)
        self.ui_filters.setPopupMode(QtWidgets.QToolButton.InstantPopup)



# Main
# -----------------------------------------------------------------------------
def main():
    app = QtWidgets.QApplication(sys.argv)
    ex = MyTool()
    ex.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

QMenutriggered信号,这个returnsQAction关联到按下的item,获取文本我们使用text()方法QAction 的:

def create_actions(self):
    # filters menu
    self.menu_filters = QtWidgets.QMenu(self)
    filters = ['Asphalt','Ceramic','Concrete','Fabric','Ground','Granite','Leather']
    for x in filters:
        action = self.menu_filters.addAction(x)
    self.ui_filters.setMenu(self.menu_filters)
    self.ui_filters.setPopupMode(QtWidgets.QToolButton.InstantPopup)
    self.menu_filters.triggered.connect(self.onTriggered)

def onTriggered(self, action):
    print(action.text())