If you have the exact same menu to show for all the buttons then you could
just handle the menu from the window instead of individually for each
button:

class Window(QtGui.QDialog):

    def __init__(self):
        super(Window, self).__init__()
        self.resize(800,600)

        layout = QtGui.QVBoxLayout(self)
        for i in xrange(10):
            button = QtGui.QPushButton("Button %d" % i, self)
            layout.addWidget(button)

    def contextMenuEvent(self, event):
        child = self.childAt(event.pos())
        if isinstance(child, QtGui.QPushButton):
            event.accept()
            self._showButtonMenu(child, event.globalPos())
            return

        super(Window, self).contextMenuEvent(event)

    def _showButtonMenu(self, button, pos):
        menu = QtGui.QMenu()
        menu.addAction('First Action')
        menu.addAction('Second Action')
        menu.exec_(pos)




On Sat, May 3, 2014 at 9:20 AM, mAtt RINGOT <[email protected]> wrote:

> Hey guys,
>
> I hope you are well !
>
> I'm currently trying to create quite a lot of contextMenu for lots of
> different buttons in a maya UI I'm working on.
>
> The issue is that I've a long list of buttons and I need the same
> contextMenu for all of them.... What I'm doing now is not really elegant,
> that's why I'm asking if you could help me...
>
> Because with the following process, my script will be reallllyyy realllyyy
> long but I can't figure out how to clean that properly :(
>
> Here's an example of my code :
> from PyQt4 import QtCore,QtGui,uic
> from functools import partial
> import os
>
>
> class MyWidget(QtGui.QWidget):
> def __init__(self, parent=None):
> QtGui.QWidget.__init__(self, parent)
>
> uiFilePath = os.path.join(os.path.dirname(__file__),"myfile.ui")
> self.ui = uic.loadUi(uiFilePath, self)
>  '''
> Right Click Menu
> '''
> self.ui.buttonA.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
> self.ui.buttonA.customContextMenuRequested.connect(self.buttonAMenu)
>  self.ui.buttonB.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
> self.ui.buttonB.customContextMenuRequested.connect(self.buttonBMenu)
>  '''
> BUTTON A
> '''
> @QtCore.pyqtSlot()
> def on_buttonA_released(self):
> print ('Doing Stuff when clicking on Button A')
>  def buttonAMenu(self, pos):
> menu = QtGui.QMenu()
> menu.addAction('First Action', lambda:self.FirstActionButtonA(objects))
> menu.addAction('Second Action', lambda:self.SecondActionButtonA(objects))
> menu.exec_(QtGui.QCursor.pos())
>  def FirstActionButtonA(self, objects):
> print ('First Action working on :')
> print (objects)
>  def SecondActionButtonA(self):
> print ('Second Action working on :')
> print (objects)
>  '''
> BUTTON B
> '''
> @QtCore.pyqtSlot()
> def on_buttonB_released(self):
> print ('Doing Stuff when clicking on Button B')
>  def buttonBMenu(self, pos):
> menu = QtGui.QMenu()
> menu.addAction('First Action', lambda:self.FirstActionButtonB(objects))
> menu.addAction('Second Action', lambda:self.SecondActionButtonB(objects))
> menu.exec_(QtGui.QCursor.pos())
>  def FirstActionButtonB(self, objects):
> print ('First Action working on :')
> print (objects)
>  def SecondActionButtonB(self):
> print ('Second Action working on :')
> print (objects)
>
>
> Sorry, the code highlighting seems to not work...
>
> Thanks a lot for your help !
>
> m.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Python Programming for Autodesk Maya" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/python_inside_maya/cd18e5e1-8b14-4e74-9017-9dac18a6c69a%40googlegroups.com<https://groups.google.com/d/msgid/python_inside_maya/cd18e5e1-8b14-4e74-9017-9dac18a6c69a%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA0gZZPBoLV-N66t_62oAhvCjgiFPoczJHr_QHBvh57WXA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to