1. 程式人生 > >PyQt 右鍵選單的實現(Qt.CustomContextMenu方式)

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

從Qt文件Qt::ContextMenuPolicy的值可以看出,實現右鍵選單的方式有三種,這對於所有繼承於QWidget的類都是通用的,在用每一種方式實現之前都要呼叫QWidget::setContextMenuPolicy(Qt::ContextMenuPolicy)方法,將要需要設定右鍵選單的元件的ContextMenuPolicy值設為相應的值,下面我分享一下用Qt::CustomContextMenu方式實現右鍵選單的例子,用的是python語言,因為python比較簡單。

#coding=utf-8

import sys

from PyQt4 import QtGui
from PyQt4.QtCore import Qt

class MainWindow(QtGui.QMainWindow):
	def __init__(self):
		super(MainWindow, self).__init__()
		self.createContextMenu()


	def createContextMenu(self):
		'''
		建立右鍵選單
		'''
		# 必須將ContextMenuPolicy設定為Qt.CustomContextMenu
		# 否則無法使用customContextMenuRequested訊號
		self.setContextMenuPolicy(Qt.CustomContextMenu)
		self.customContextMenuRequested.connect(self.showContextMenu)

		# 建立QMenu
		self.contextMenu = QtGui.QMenu(self)
		self.actionA = self.contextMenu.addAction(u'動作A')
		self.actionB = self.contextMenu.addAction(u'動作B')
		self.actionC = self.contextMenu.addAction(u'動作C')
		# 將動作與處理函式相關聯
		# 這裡為了簡單,將所有action與同一個處理函式相關聯,
		# 當然也可以將他們分別與不同函式關聯,實現不同的功能
		self.actionA.triggered.connect(self.actionHandler)
		self.actionB.triggered.connect(self.actionHandler)
		self.actionB.triggered.connect(self.actionHandler)


	def showContextMenu(self, pos):
		'''
		右鍵點選時呼叫的函式
		'''
		# 選單顯示前,將它移動到滑鼠點選的位置
		self.contextMenu.move(self.pos() + pos)
		self.contextMenu.show()


	def actionHandler(self):
		'''
		選單中的具體action呼叫的函式
		'''
		print 'action handler'


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


如果大家認為實現的方式有不妥,歡迎拍磚,如果大家還有什麼好的實現方式,還請分享一下!

相關推薦

PyQt 選單實現Qt.CustomContextMenu方式

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

Dev DevExpress之treelist選單實現

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

TreeList屬性設定以及選單實現

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

jqgrid選單實現

一、需要引入js(在資源部分): http://download.csdn.net/detail/jiana227/6625071 <script src="${syspath}/static/js/jquery.contextmenu.r2.js?<

為extjs的TabPanel 新增關閉效果修改一個bug

原地址:http://my.oschina.net/zhongwenhao/blog/333134?fromerr=nmntbKsp 效果圖如下: 因為我用的是extjs-4.2.1.883 這個版本,右鍵選單的相關原始碼需要在釋出包下的原

win10下選單項裡沒有"開啟方式"的解決辦法

一、開啟登錄檔編輯器:首先,win鍵和r鍵 一起按進入執行介面,在裡面輸入regedit,再摁回車或點那個確定進入登錄檔編輯器 二、找到shell資料夾:計算機\HKEY_CLASSES_ROOT*:在左邊目錄中找到HKEY_CLASSES_ROOT目錄下

字串資料結構實現連結串列方式

相較於陣列方式的實現,C語言我採用了單鏈表的方式實現,C++採用了雙鏈表的方式。毫無疑問,雙鏈表的效率肯定是要遠高於單鏈表的。這次支援中文字元的操作,這個實現的思路是,在節點類中新增兩個成員變數,一個用來存放char字元,一個用來存放wchar_t字元。關於兩者的相互轉換及輸出請參考 C語言

Warshall演算法的實現兩種方式

 法一: import java.util.*; public class TestDemo { public static void main(String[] args){ System.out.print("請輸入矩陣的階數:"); Scanner inpu

分散式鎖的實現三種方式

很多小夥伴在學習Java的時候,總是感覺Java多執行緒在實際的業務中很少使用,以至於不會花太多的時間去學習,技術債不斷累積!等到了一定程度的時候對於與Java多執行緒相關的東西就很難理解,今天需要探討的東西也是一

MFC逃跑按鈕的實現兩種方式

簡易版本的逃跑按鈕的實現,下面是兩個實現方法,一個是建立兩個一樣的按鈕,然後通過一個按鈕接觸滑鼠時,隱藏並顯示另一個按鈕來實現"逃跑"。另一個是通過SetWindowPos函式來隨機地讓按鈕在新位置出現 下面是主要的程式碼 先是第一個版本 然後是第二個版本 // NewBu

級聯下拉列表 ajax實現兩種方式

案例:設定一個級聯下拉列表,省市區,根據id進行查詢,同屬於同一個省的城市前兩位id相同,屬於同一個市的區前4位id相同 資料庫資料如下(部分): 第一種方式:通過獲取json物件,然後進行解析js

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

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

JS自定義選單—複製到貼上板jQuery和原生JS實現

##自定義右鍵選單——複製到貼上板 ####需求: 滑鼠在li標籤上點選右鍵出現選單,主要是複製等功能 遮蔽瀏覽器預設右鍵點選事件 右鍵選單出現在滑鼠點選的位置 點選螢幕其他位置選單消失

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

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

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

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

ArcEngine10.2設計與開發課程學習作業二——基本應用程式生成,選單實現:顯示、移除和開啟屬性表功能

前言:這裡是我的筆記本 目錄: 準備工作——工具方法等 程式碼   首先說明一下第一個作業,這是第二個的連結:https://pan.baidu.com/s/1NziPHoMEJx0vc8DCNrX-dA提取碼:qpee 看的時候希望能夠靜下心來看,不要著急

Qt QListWidget QTreeWidget QComboBox等控制元件中,禁用滾動條的選單

有時候在開發新控制元件的時候,會偶然點到滾動條的右鍵選單,出現之後很難看 那麼怎麼去掉呢? 其實很簡單,如果是QListWidget ,QTreeWidget控制元件, //記得包含標頭檔案 #i

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

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

SlwUiSuper Lightweight UI前端js外掛菜單系列3選單SlwCtxMenu,導航選單SlwMenu

      今天介紹前端js外掛菜單系列(3)右鍵選單SlwCtxMenu,導航選單SlwMenu。 基於jQuery,瀏覽器相容(Browser Support) Internet Explore

win32 實現選單

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