According to the Qt4 docs, a QMenu is supposed to be capable of emitting a
`triggered' event which contains the action which was triggered. (I realize
that its a better coding practice to connect the `triggered' event
associated with individual QActions to their own separate callbacks, but I'm
porting an application from Qt3 to Qt4 and I'd prefer not to
have to write a whole bunch (~50) of new callbacks.) So I'd like to get the
more global QMenu triggered event to work. Unfortunately, with PyQt, I can't
seem to see or catch the QMenu's triggered event. The attached PyQt demo
script illustrates the problem. Can someone point out what I'm doing wrong?


Thanks

Tony
import sys
from PyQt4.QtCore import * 
from PyQt4.QtGui import *

class mepViewer(QDialog):

    def __init__(self, parent=None):
        super(mepViewer, self).__init__(parent)
        self.setWindowTitle('QAction demo.py')

        # The status bar gives status and progress.
        # (do this one first, so we can send messages)
        self._statusBar = QStatusBar()
        self._statusBar.showMessage('This is the status bar')

        # The menu-bar:
        self._menuBar = QMenuBar()
        self._menuBar.addMenu(self.make_file_menu())


        # Make the overall vertical layout:
        vlayout = QVBoxLayout()
        vlayout.addWidget(self._menuBar)
        self.setLayout(vlayout)

        return None

    def make_file_menu(self):
        """
        Make the file menu on the main menubar.
        """
        actiongroup = QActionGroup(self)
        menu = QMenu('&File', self)
# the next line works
        self.connect(menu, SIGNAL('aboutToShow()'), self.about_to_show)

# the following line doesn't seem to work 
        self.connect(menu, SIGNAL('triggered()'), self.was_triggered)

        action = QAction('&New', self)
        action.setToolTip('Open a new .mep file')
        action_id = 1
        action.setData(QVariant(action_id))
        menu.addAction(action)
# the following works just fine
        self.connect(action, SIGNAL('triggered()'), self.new_mepTable_dialog)

# unfortunately the following doesn't seem to do anything
        self.connect(menu, SIGNAL('triggered(action)'), self.was_triggered)

# nor does the following 
        self.connect(menu, SIGNAL('triggered(QAction)'), self.was_triggered)

# the following works, but doesn't seem to be terribly useful 
# as the signal contains a negative integer
        self.connect(menu, SIGNAL('activated(int)'), self.catch_int)


        action = QAction('&Simulated', self)
        action.setToolTip('Simulated .mep table')
        menu.addAction(action)
        self.connect(action, SIGNAL('triggered()'), self.read_mepfile)

        action = QAction('&Exit', self)
        action.setToolTip('Exit command')
        menu.addAction(action)
        self.connect(action, SIGNAL('triggered()'), self.do_exit)

        return menu

    #----------------------------------------------------------------

    def was_triggered(self, action):
        print 'caught triggered event'

    def about_to_show(self):
        print 'in about_to_show'

    def new_mepTable_dialog(self):
        print 'in new_mepTable'

    def read_mepfile (self):
        print 'in read_mepfile'

    def do_exit (self):
        print 'in do_exit'

    def catch_int(self, value):
        print 'in catch_int with value ', value

if __name__ == '__main__':

   app = QApplication(sys.argv)
   mv = mepViewer()
   mv.show()
   app.exec_()

_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to