1. 程式人生 > >PyQt5 實現右鍵選單

PyQt5 實現右鍵選單

QWidget 及其子類均支援右鍵選單功能,通過宣告 ContextMenuPolicy 啟用選單

Qt.DefaultContextMenu 預設選單,重寫 contextMenuEvent() 實現自定義
Qt.NoContextMenu 無選單,事件響應傳遞給部件父級
Qt.PreventContextMenu 無選單,事件響應不繼續傳遞
Qt.ActionsContextMenu 事件選單,只響應部件事件,部件子件的事件不響應
Qt.CustomContextMenu 使用者自定義選單,需繫結事件 customContextMenuRequested,並實現 槽函式
        # self inherit QWidget
        self.setContextMenuPolicy(Qt.DefaultContextMenu)  # contextMenuEvent()
        self.setContextMenuPolicy(Qt.NoContextMenu)
        self.setContextMenuPolicy(Qt.PreventContextMenu)
        self.setContextMenuPolicy(Qt.ActionsContextMenu)
        self.setContextMenuPolicy(Qt.CustomContextMenu)  # customContextMenuRequested()

1、實現使用者選單 



class handler_demo(QWidget, Ui_demo):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        # self inherit QWidget
        self.table_widget.setContextMenuPolicy(Qt.CustomContextMenu)
        self.table_widget.customContextMenuRequested.connect(self.custom_right_menu)

    def custom_right_menu(self, pos):
        menu = QMenu()
        opt1 = menu.addAction("menu1")
        opt2 = menu.addAction("menu2")
        action = menu.exec_(self.table_widget.mapToGlobal(pos))
        if action == opt1:
            # do something
            return
        elif action == opt2:
            # do something
            return
        else:
            return


2、使用事件選單 # TODO



class handler_demo(QWidget, Ui_demo):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        # self inherit QWidget
        self.table_widget.setContextMenuPolicy(Qt.ActionsContextMenu)
        self.table_widget.customContextMenuRequested.connect(self.custom_right_menu)

    def custom_right_menu(self, pos):
        menu = QMenu()
        opt1 = menu.addAction("menu1")
        opt2 = menu.addAction("menu2")
        action = menu.exec_(self.table_widget.mapToGlobal(pos))
        if action == opt1:
            # do something
            return
        elif action == opt2:
            # do something
            return
        else:
            return


 3、重寫預設選單 # TODO


class handler_demo(QWidget, Ui_demo):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

    def contextMenuEvent(self, event):
        menu = QMenu()
        opt1 = menu.addAction("menu1")
        opt2 = menu.addAction("menu2")
        action = menu.exec_(self.table_widget.mapToGlobal(event.pos()))
        if action == opt1:
            # do something
            return
        elif action == opt2:
            # do something
            return

        menu.move(event.pos())
        menu.show()

 參考資料

相關推薦

PyQt5 實現選單

QWidget 及其子類均支援右鍵選單功能,通過宣告 ContextMenuPolicy 啟用選單 Qt.DefaultContextMenu 預設選單,重寫 contextMenuEvent(

win32 實現選單

contextMenu.h #ifndef _CONTEXTMENU_H_ #define _CONTEXTMENU_H_ #include <windows.h> #define ITEM_MENU_FULLSCREEN 40001 #define ITEM

QListWidget的item上實現選單

。 問題:如何實現在一個列表中點選右鍵,如果在Item上面,則有“修改”選項,在其餘空白處,則只有“新增”,"刪除"選項。 實現右鍵選單, 從QListWidget中派生出ListWidget,重寫 void QWidget::contextMenuEvent ( QContextMenuEvent * ev

tkinter實現選單

一 程式碼 import tkinter root = tkinter.Tk() menu = tkinter.Menu(root,tearoff=0) menu.add_command(label

zTree結合jquery.contextMenu.js實現選單

var zTree; var demoIframe; var selectNode; var flag=true; var setting = { view: { dblClickExpand: false,

VC++實現生成選單及新增圖示

用VC++實現彈出選單比較簡單,這裡介紹其中的一種來實現一個滑鼠右鍵彈出選單,效果如下圖所示:     步驟: 一、新建一個基於對話方塊的MFC應用程式-----PopMenu 二、新增一個選單資源------IDR_MENU1,並加幾個子項,如下 &nb

jxbrowser 實現自定義選單 jxbrowser破解版請聯絡作者

QQ 921888199 public static void main(String[] args) { JPopupMenu.setDefaultLightWeightPopupEnabled(false); Browser browser =

Dev DevExpress之treelist選單實現

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

TreeList屬性設定以及選單實現

AllowSort = False,//關閉排序 AllowEdit = False//不能編輯 --------右鍵選單實現   新增右鍵流程: 1.先在窗體上拖兩個控制元件,分別是popupMenu和barManager 2.barManager中繫結form屬性為當前窗體名稱 3

python3實現tkinter視窗懸浮,選單操作,多執行緒控制

專案需要,做了一個demo直接上程式碼供大家參考,並且留為記錄 需要更深入瞭解,可以加微信qypangu相信交流,請注時"csdn  python" #!/usr/bin/python3 # -*- coding: utf-8 -*- import tkinter im

nz-tree的選單實現, 以及選中狀態的實現

ant design of angular中的nz-tree在官方例項並沒有給出和context menu的例子, 不過官方的context menu獨立的例子倒是有: https://ng.ant.design/components/drop

[原始碼和文件分享]修改登錄檔實現新增滑鼠選單選項

背景 我們安裝一些應用程式的時候,經常都會看到程式安裝完後,會建立滑鼠右鍵選單項,方便使用程式。建立系統右鍵選單項,通常都會使用擴充套件Shell介面來實現,會涉及到COM的相關知識,碎語初學者來說比較難理解。 現在,本文介紹一種簡單的方法實現相同的功能。就是,修改登錄檔來實現。現在,把功能

【Qt】選單欄、工具欄、狀態列、選單實現

在QMainWidget基礎上實現選單欄、工具欄、狀態列、右鍵選單。 標頭檔案: #ifndef GWDEMO_H #define GWDEMO_H #include <QMainWindow> #include <QMenu> #include <Q

vc托盤圖示的實現以及托盤選單的響應

#define  UM_SHOW_TORY_ICON WM_USER + 200 + 1      // 用於響應托盤圖示訊息 void addToTray() {HINSTANCE hInst = m_pm.GetInstance();HICON hIcon;hIcon

Js實現——出現選單選單中有新建,複製,剪下,貼上,刪除

描述:    單擊右鍵出現選單,選單中有新建,複製,剪下,貼上,刪除    選擇新建時,建立第一個div,寬高50,顏色隨機,並且放在滑鼠點選的位置    點選div,div被選中,加邊線,如果被選中,div可以被拖動,當選擇別的d

AE學習筆記之選單的新增與實現

        ArcGIS Engine 中自定義了一些新增命令、工具和選單的基類,在需要寫相應函式的時候可以直接很方便的新增。 我在前面的文章裡面有一節講述過如何新增控制元件命令:http://blog.csdn.net/my_lord_/article/detail

PyQt 選單實現(Qt.CustomContextMenu方式)

從Qt文件Qt::ContextMenuPolicy的值可以看出,實現右鍵選單的方式有三種,這對於所有繼承於QWidget的類都是通用的,在用每一種方式實現之前都要呼叫QWidget::setContextMenuPolicy(Qt::ContextMenuPolicy)方

jxbrowser 實現自定義選單 jxbrowser破解版請聯絡作者

QQ 921888199 public static void main(String[] args) { JPopupMenu.setDefaultLightWeightPopupEnabled(false); Browser bro

MFC 實現richedit選單的複製貼上功能

//滑鼠右鍵響應函式 void CMSR009BTDlg::OnContextMenu(CWnd* pWnd, CPoint point)  {// TODO: Add your message handler code hereCMenu popMenu;CRect rect1,rect2,rect3;//

JQ實現點選彈出選單

<script type="text/javascript" src="js/jquery-1.11.1.min.js"></script> <script type="text/javascript"> //遮蔽瀏覽器右鍵選單 doc