MainWindow中的KeyEvent(PyQt4)

时间:2013-01-11 13:00:19

标签: python qt pyqt pyqt4

我正在尝试使用PyQt4构建GUI并使用箭头键控制某些操作。然而,我没有得到击键。

这必须是一个简单的问题,但我是新手。所以任何帮助将不胜感激。谢谢!

import sys
from PyQt4 import QtCore, QtGui

class Ui_MainWindow(object):
   def setupUi(self, MainWindow):
     MainWindow.setObjectName(_fromUtf8("MainWindow"))
     MainWindow.resize(910, 500)
     self.centralwidget = QtGui.QWidget(MainWindow)
     self.centralwidget.setObjectName(_fromUtf8("centralwidget"))  

     MainWindow.setCentralWidget(self.centralwidget)
     self.menubar = QtGui.QMenuBar(MainWindow)
     self.menubar.setGeometry(QtCore.QRect(0, 0, 240, 22))
     self.menubar.setObjectName(_fromUtf8("menubar"))
     MainWindow.setMenuBar(self.menubar)
     self.statusbar = QtGui.QStatusBar(MainWindow)
     self.statusbar.setObjectName(_fromUtf8("statusbar"))
     MainWindow.setStatusBar(self.statusbar)

  def keyPressEvent(self, event):
     key = event.key()
     print(key)

     if key == QtCore.Qt.Key_Left:
        print('Left Arrow Pressed')

if __name__=='__main__':
  app = QtGui.QApplication(sys.argv)
  MainWindow = QtGui.QMainWindow()
  ui = Ui_MainWindow()
  ui.setupUi(MainWindow)

  MainWindow.show()
  sys.exit(app.exec_())

2 个答案:

答案 0 :(得分:5)

keyPressEvent应在QWidget中重新实现。在这种情况下,是QWidget

的子类

你不应该把它放在一个ui类中。

class MyWindow(QtGui.QMainWindow):
    def keyPressEvent(...
        ...

if __name__=='__main__':
    ...
    window=MyWindow()
    ...
    sys.exit(app.exec_())  # and don't forget to run the mainloop

答案 1 :(得分:1)

我遇到了类似的问题,但我不需要从.ui文件中更改生成的python脚本的结构。

所以一个简单的方法是在def setupUI中添加以下内容

MainWindow.keyPressEvent = self.newOnkeyPressEvent

然后在Ui_MainWindow类中创建自己的按键功能

def newOnkeyPressEvent(self,e):
if e.key() == QtCore.Qt.Key_Escape:
    print "User has pushed escape"