2016-07-28 50 views
0

我想改变一个自定义contextMenu如何触发一个小部件,但我还没有找到解决方案。我在一个标准的方式添加一个ContextMenu到QListWidget:PyQt:我如何更改customContextMenu触发器?

self.shotsList = QtGui.QListWidget() 
self.shotsList.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) 
self.shotsList.customContextMenuRequested.connect(self.shotsPopUp) 

用户请求菜单显示在鼠标右键按下(而不是鼠标释放),那么他们可以选择菜单项,这是在发布时触发(标记菜单样式)。

这可能吗?

+0

这是什么平台?你描述的行为是Linux上的默认行为。 – ekhumoro

回答

0
#customContextMenu trigger 
#This is the example code for customContextMenu trigger 
#If your are not expecting this answer, sorry. 


import sys 
from PyQt4 import QtGui 
from PyQt4 import QtCore 

class Window (QtGui.QWidget): 
    def __init__(self, parent=None):   

     super(Window, self).__init__(parent) 

     self.listWidget = QtGui.QListWidget(self) 
     self.listWidget.setObjectName('listWidget') 

     self.pushButton = QtGui.QPushButton(self) 
     self.pushButton.setGeometry(QtCore.QRect(20, 220, 101, 23)) 
     self.pushButton.setObjectName('pushButton') 
     self.pushButton.setText('Add') 

     self.verticalLayout = QtGui.QVBoxLayout(self) 
     self.verticalLayout.setObjectName ('verticalLayout')   

     self.verticalLayout.addWidget(self.listWidget) 
     self.verticalLayout.addWidget(self.pushButton) 


     #Right click menu 
     self.listWidget.setContextMenuPolicy (QtCore.Qt.CustomContextMenu)   
     self.listWidget.customContextMenuRequested.connect (self.rightClickFunction)      

     self.action   = QtGui.QAction (self) 
     self.action.setObjectName('action')   
     self.action.setText ('Open') 

     self.action1   = QtGui.QAction (self) 
     self.action1.setObjectName('action1')   
     self.action1.setText ('Test') 

     self.customMenu   = QtGui.QMenu('Menu', self.listWidget)  
     self.customMenu.addAction (self.action) 
     self.customMenu.addAction (self.action1) 

     #self.customMenu.addAction (QtGui.QIcon(''), 'Open', (self.oepnFunction))   
     #self.customMenu.addAction (QtGui.QIcon(''), 'Test', (self.testFunction))  

     self.pushButton.clicked.connect (self.addItem) 
     self.action.triggered.connect (self.oepnFunction) 
     self.action1.triggered.connect (self.testFunction) 

     #void changed() 
     #void hovered() 
     #void toggled (bool) 
     #void triggered (bool = 0) 


    def addItem (self) : 
     count = int (self.listWidget.count())   
     self.listWidget.addItem (str(count+1) + '_') 


    def rightClickFunction (self, event) : 
     index = self.listWidget.indexAt (event) 
     if not index.isValid(): 
      return 
     item = self.listWidget.indexAt(event) 
     self.customMenu.popup (QtGui.QCursor.pos())  


    def oepnFunction (self) : 
     print 'hai............open' 

    def testFunction (self) : 
     print 'hai............test' 


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