python - Implementing keyPressEvent in QWidget -


i have qdialog window has continue button. continue button default button because whenever press enter key, continue button pressed. discovered strange: when press enter key 3 times, continue button presses 3 times. however, when press fourth time, whole window closes. have cancel button right below continue button closes window, don't make cancel button default button or anything.

i wanted override keypressevent whenever i'm in window, enter button connected continue button.

this have right now:

class manualbalanceui(qtgui.qwidget):     keypressed = qtcore.pyqtsignal()      def __init__(self, cls):         super(qtgui.qwidget, self).__init__()         self.window = qtgui.qdialog(none, qtcore.qt.windowsystemmenuhint)         self.ui = uic.loadui('manualbalanceui.ui', self.window)         self.keypressed.connect(self.on_key)      def keypressevent(self, event):         super(manualbalanceui, self).keypressevent(event)         self.keypressed.emit(event)       def on_key(self, event):         if event.key() == qtcore.qt.key_enter , self.ui.continuebutton.isenabled():             self.proceed()  # called whenever continue button pressed         elif event.key() == qtcore.qt.key_q:             self.window.close()  # test implemented see if pressing 'q' close window      def proceed(self):          ...      ... 

however, doesn't seem doing right now. pressing 'q' doesn't close window, , can't tell if 'enter' key working or not.

i looked @ question beforehand: pyqt connect keypressevent

i reviewed documentation on sourceforge. appreciated!

you can 2 ways , 1 re implement keypressevent out fancy work. this

from pyqt4 import qtcore, qtgui import sys  class example(qtgui.qwidget):     def __init__(self):         super(example, self).__init__()         self.setgeometry(300, 300, 250, 150)         self.show()      def keypressevent(self, event):         if event.key() == qtcore.qt.key_q:             print "killing"             self.deletelater()         elif event.key() == qtcore.qt.key_enter:             self.proceed()         event.accept()      def proceed(self):         print "call enter key"  def main():     app = qtgui.qapplication(sys.argv)     ex = example()     sys.exit(app.exec_())  if __name__ == '__main__':     main() 

or tried signals, in case missing implement signal properly, here updated version.

class example(qtgui.qwidget):     keypressed = qtcore.pyqtsignal(qtcore.qevent)     def __init__(self):         super(example, self).__init__()         self.setgeometry(300, 300, 250, 150)         self.show()         self.keypressed.connect(self.on_key)      def keypressevent(self, event):         super(example, self).keypressevent(event)         self.keypressed.emit(event)       def on_key(self, event):         if event.key() == qtcore.qt.key_enter , self.ui.continuebutton.isenabled():             self.proceed()  # called whenever continue button pressed         elif event.key() == qtcore.qt.key_q:             print "killing"             self.deletelater()  # test implemented see if pressing 'q' close window      def proceed(self):         print "call enter key"  def main():     app = qtgui.qapplication(sys.argv)     ex = example()     sys.exit(app.exec_())  if __name__ == '__main__':     main() 

Comments