Skip to content

[PyQt5] 使用右鍵打開菜單選項

如同標題所述,今天希望能夠紀錄一下『在界面上點擊右鍵,便打開選項菜單』這一常見的動作——當然,也不是非得使用右鍵不可啦,只是相對常見而已。

如果我的敘述難以讓人聽明白的話,可以直接看看效果圖吧:

這是我寫的一個桌面小工具,專門放在桌面上顯示時間和日期
在界面上點擊右鍵,就會顯示出選項菜單

大致上就是如此。那麼今天就來紀錄怎麼撰寫這樣的程式吧!


QMenu

基本上,要完成這種功能,最重要的便是要建立一個自己的 QMenu 物件。以下便是一個簡單的 Example:

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *


class MainWindow(QWidget):
     def __init__(self):
         super(MainWindow, self).__init__()
         self.resize(400, 300)
         self.setWindowTitle('Main Window')

         # Menu
         self.setContextMenuPolicy(Qt.CustomContextMenu)
         self.customContextMenuRequested.connect(self.right_menu)

     def right_menu(self, pos):
         menu = QMenu()

         # Add menu options
         hello_option = menu.addAction('Hello World')
         goodbye_option = menu.addAction('GoodBye')
         exit_option = menu.addAction('Exit')

         # Menu option events
         hello_option.triggered.connect(lambda: print('Hello World'))
         goodbye_option.triggered.connect(lambda: print('Goodbye'))
         exit_option.triggered.connect(lambda: exit())

         # Position
         menu.exec_(self.mapToGlobal(pos))


if __name__ == '__main__':
     app = QApplication([])
     window = MainWindow()
     window.show()
     sys.exit(app.exec_())



Output:

看起來什麼都沒有,不過這是我們的主界面
按下右鍵出現選項

由於選項的功能我已經寫好了,故按下 Hello World 的時候會印出 Hello World、按下 GoodBye 的時候會印出 Goodbye、按下 Exit 的時候就真的離開了。

詳細的程式碼運作請直接參考上方的程式碼吧。


References

Leave a Reply