Sorry about the repost but I think that the PyQt mailing list swallowed the text with my
question ...

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 following 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