PyQt5 之右鍵選單

Galois發表於2020-03-30

右鍵選單也叫彈出框(!?)
右鍵選單是在某些場合下顯示的一組命令。例如,Opera 瀏覽器裡,網頁上的右鍵選單裡會有重新整理,返回或者檢視頁面原始碼。如果在工具欄上右鍵,會得到一個不同的用來管理工具欄的選單。

還是使用contextMenuEvent()方法實現這個選單。

#!/usr/bin/python3
# -*- coding: utf-8 -*-

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

class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

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

    def contextMenuEvent(self, event):

            cmenu = QMenu(self)

            newAct = cmenu.addAction("New")
            opnAct = cmenu.addAction("Open")
            quitAct = cmenu.addAction("Quit")
            action = cmenu.exec_(self.mapToGlobal(event.pos()))

            if action == quitAct:
                qApp.quit()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

使用 exec_() 方法顯示選單。從滑鼠右鍵事件物件中獲得當前座標。mapToGlobal() 方法把當前元件的相對座標轉換為 視窗(window) 的絕對座標。

action = cmenu.exec_(self.mapToGlobal(event.pos()))

如果右鍵選單裡觸發了事件,也就觸發了退出事件,執行關閉選單行為。

if action == quitAct:
    qApp.quit()

預覽:

cfq7zRvrZO.png!large

本作品採用《CC 協議》,轉載必須註明作者和本文連結
不要試圖用百米衝刺的方法完成馬拉松比賽。

相關文章