pyqt5-QAction动作组件

1、介绍

动作。这是QMenu添加的项,或者QMenuBar组件直接添加。

class QAction(__PyQt5_QtCore.QObject):
    """
    QAction(parent: QObject = None)
    QAction(str, parent: QObject = None)
    QAction(QIcon, str, parent: QObject = None)
    """
    def __init__(self, *__args):
        pass

2、属性

    AboutQtRole = 3
    AboutRole = 4
    ApplicationSpecificRole = 2
    HighPriority = 256
    Hover = 1
    LowPriority = 0
    NormalPriority = 128
    NoRole = 0
    PreferencesRole = 5
    QuitRole = 6
    TextHeuristicRole = 1
    Trigger = 0

3、方法

text(self) -> str
  • 获取文本,即动作项的显示字符串。返回类型str
setText(self, text: str) 
  • 设置文本,参数类型str
setVisible(self, a0: bool)
  • 设置可见
setData(self, var: Any)
  • 设置数据
data(self) -> Any
  • 获取数据
setIcon(self, icon: QIcon)
  • 设置图片
icon(self) -> QIcon
  • 获取图片
 menu(self) -> QMenu
  • 事件触发时,基于触发的QAction调用该方法,无论是一级菜单下的QAction,还是二级菜单下的QAction,都是返回None
parent(self) -> QObject
  • 获取父类组件
setCheckable(self, a0: bool)
  • 设置是否可以有状态
isCheckable(self) -> bool
  • 判断是否可以以设置状态
setChecked(self, a0: bool)
  • 设置状态
isChecked(self) -> bool
  • 获取选中状态

4、事件

  • triggered: 点击时发射信号,( 最常用);
  • hovered: 鼠标悬浮上空时发射该信号;悬浮移动时,多次触发
  • toggled: 如果状态为选中,则checked为True,该参数会被发送;
  • changed: 只要QAction状态发生改变就会发送,如多了个图标,换了文字等。

5、QAction和QMenu的父类组件

QAction可以基于parent方法获取其父类组件,一般来说都是QMenu。可以获取QMenu组件的title属性,即显示文本,在QAction的text存在重复时,辅助判断QAction所在位置。

QMenu组件也可以基于parent方法获取其父类组件,可能是QMenu,也可能是绑定菜单的组件。

def plainTextEdit_rightMenu(self, pos: QPoint=None):
    menu = QMenu(self.window.plainTextEdit)
    menu.addAction('执行')
    menu.addAction('删除')

    menu_a = QMenu('标题',menu)
    menu_a.addAction('删除')
    menu_b = QMenu('文章',menu)
    menu_b.addAction('删除')
    menu.addMenu(menu_a)
    menu.addMenu(menu_b)
    menu.triggered.connect(self.plainTextEdit_rightMenu_triggered)

    menu.exec_(QCursor.pos())

def plainTextEdit_rightMenu_triggered(self, act: QAction):
    menu: QMenu = act.parent()
    if act.text() == '删除':
        if menu.__class__ == PyQt5.QtWidgets.QMenu and menu.title() == '标题':
            print('123')
        elif menu.__class__ == PyQt5.QtWidgets.QMenu and menu.title() == '文章':
            print('abc')

 

posted @ 2023-10-02 00:26  挖洞404  阅读(339)  评论(0编辑  收藏  举报