美文网首页
PyQt5 context menu (也就是右键点击后出现的)

PyQt5 context menu (也就是右键点击后出现的)

作者: _Mirage | 来源:发表于2020-04-01 23:26 被阅读0次

To work with a context menu, we have to reimplement the contextMenuEvent() method.

当我们在PyQT5组件上右键点击窗体时会触发一个事件:contextMenuEvent,
我们要想自己设计右键点击后弹出的事件,我们就必须要重载contextMenuEvent这个方法。

代码:

# coding='utf-8'


from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, qApp
import sys


class Gui(QMainWindow):
    def __init__(self):
        super().__init__()
        self.start()

    def start(self):
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Context menu')
        self.show()

    def contextMenuEvent(self, event) -> None:
        menu = QMenu(self)

        new_action = menu.addAction('New')
        open_action = menu.addAction('Open')
        quit_action = menu.addAction('Quit')
        # 必须要让右键点击后的menu菜单能够一直存在(直到用户再次点击)
        # 我们就必须要使用menu.exec_的方法让它一直存在
        # 但是只是用这个方法的话,出现的menu菜单不是在我们的主窗口上面\
        # 而是在我们的主窗口外面(而且是0, 0的位置),意思就是menu要运行,\
        #但是它不知道我们主窗口运行在哪个位置,
        # 所以我们要用mapToGlobal(event.pos())这个函数,将主函数里面的\
        # 主窗口永真循环的exec_函数和这个联系起来,\
        #这时我们获得的是事件触发(右键点击在哪里)时候的位置坐标\
        # event.pos,mapToGlobal返回的是一个位置坐标,
        # 同时让menu运行在这个位置,而不是默认的(0, 0)
        action = menu.exec_(self.mapToGlobal(event.pos()))
        if action == quit_action:
            qApp.quit()


win = QApplication(sys.argv)
gui = Gui()
sys.exit(win.exec_())

运行结果:


image.png

相关文章

网友评论

      本文标题:PyQt5 context menu (也就是右键点击后出现的)

      本文链接:https://www.haomeiwen.com/subject/qzgzuhtx.html