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